Просмотр, загруженный из NIB и отображаемый с помощью addSubView, не соответствует ограничениям

У меня представление загружено довольно просто:

self.splashView = [[[NSBundle mainBundle] loadNibNamed:@"DownloadingData"
                                                        owner:nil options:nil] objectAtIndex:0];
[self.view addSubview:self.splashView];

Это полноразмерный 4-дюймовый вид сетчатки в портретном режиме со строкой состояния, верхней и нижней полосами, установленными на «Нет». У него есть ограничения, такие как изображение выравнивается по низу. Я использую аналогичные представления в контроллерах в других местах приложения, и они изменяют размер в доступное пространство (с NavigationBar и TabBar) абсолютно нормально.Однако это представление, загруженное непосредственно из пера, а затем добавленное, похоже, игнорирует ограничения.

Представление предназначено для использования во всевозможных ситуациях, например. с/без какой-либо комбинации панелей навигации/панелей вкладок.

Я пробовал различные комбинации setNeedsLayout, setNeedsUpdateConstraints на splashView. Я также пытался вызвать layoutSubviews в самом представлении.

Кто-нибудь может дать совет? В этом случае я должен делать это по-другому? Возможно, с помощью viewController или добавления ограничений вручную в код?


person Diziet    schedule 16.10.2012    source источник


Ответы (1)


Ну, я думаю, это было очевидно на самом деле:

self.splashView = [[[NSBundle mainBundle] loadNibNamed:@"DownloadingData"
                                                 owner:nil options:nil] objectAtIndex:0];
[self.view addSubview:self.splashView];
[self.splashView setFrame:self.view.frame];

Затем автоматическое изменение размера/ограничения работают должным образом.

person Diziet    schedule 17.10.2012
comment
Зачем нужно ставить рамку? У меня такая же проблема, и я бы предпочел делать все в автоматическом режиме. Ты знаешь? - person Will Larche; 30.01.2014
comment
Честно говоря, понятия не имею, это было довольно давно, и сейчас я так не делаю. Тогда обработка ограничений в IB была ужасной, теперь она просто терпима с некоторыми причудами. Работая с аналогичной настройкой в ​​​​раскадровке, у меня нет этой проблемы, и мне не нужно устанавливать рамку. Весь этот вопрос/ответ вполне мог быть проблемой из-за моего понимания ограничений и плохой обработки XCode/Interface Builder (в 2012 году). - person Diziet; 31.01.2014
comment
лучше использовать границы для дочерних представлений, т.е. self.splashView.frame = self.view.bounds - person sim; 08.07.2015