iPad / iPod: функция автоматического изменения размеров в окне - PullRequest
0 голосов
/ 26 мая 2010

При разработке интерфейса iPad у меня есть сценарий, в котором у меня есть UIViewController, который управляет представлением, которое помещается непосредственно как подпредставление основного окна UIWindow.

Перед размещением в окне UIWindow это представление изменяется до нестандартного размера, скажем, 768x460, и размещается в нижней части экрана.

При вращении устройства функция автоматического поворота UIViewController приводит к изменению размера представления так, чтобы оно заполняло все пространство UIWindow.

Я подумал, что это может быть связано с тем, что в XIB для представления установлен размер окна, но когда я изменил его, чтобы отразить желаемый размер, он все равно расширил его до размера окна.

Затем я вошел в MainWindow XIB и отключил autoresizeSubviews, и это все еще происходит.

Это очень неприятная проблема, я надеюсь, что есть просто нечто очевидное, что я упускаю.

У кого-нибудь есть яркие идеи?

Код по запросу:

browseController = [[BrowseController alloc] initWithNibName:@"BrowseController" bundle:nil];

[[browseController view] setFrame:CGRectMake(0, 544, 768, 460)];

[window addSubview:[browseController view]];

Ответы [ 4 ]

1 голос
/ 28 мая 2010

Если вы работаете в конструкторе интерфейсов, нажмите на вкладку размера, когда редактируете вид. В разделе «Авторазмер» нажмите на все красные стрелки, чтобы они исчезли. Вы не хотите никаких красных стрелок там. Или в коде вы можете сделать следующее:

browseController.autoresizingMask = UIViewAutoresizingNone;
0 голосов
/ 01 июня 2012

У меня только что была эта проблема, и вот как я ее исправил:

Убедитесь, что вы определили контроллер представления для представления, которое вы присоединяете к верхнему уровню окна. Если вы этого не сделаете, макет сойдет с ума от вас.

0 голосов
/ 31 января 2011

Недостаточно информации из вашего вопроса, но это обычно проблема (поэтому я делаю обоснованное предположение):

Apple заявляет, что в UIWindow на корневом уровне должен существовать только ОДИН UIView - если их больше одного, то поведение не определено. Часто есть еще один, который вы не заметили, который был там / о котором забыли несколько недель назад.

На практике я обнаружил, что когда "больше чем один", возникает много таких ошибок ротации, когда код Apple запутывается и начинает случайное перемещение.

Стандартный обходной путь:

  1. В каждом приложении, которое вы когда-либо создавали
  2. ... всегда есть один пустой MyRootViewController, который вы добавляете в UIWindow
  3. ... затем добавьте в него столько представлений, сколько хотите, а также подпредставлений

(поскольку странные ошибки Apple влияют только на само UIWindow - все подпредставления работают "как положено")

0 голосов
/ 27 мая 2010

А как насчет пружин и распорок? (aka autoresizingMask) См. здесь . В коде вам может понадобиться дополнительная строка

[[browseController view] setAutoresizingMask:UIViewAutoresizingNone];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...