2014-10-10 2 views
0

Я пытаюсь добавить subview в существующее представление. Я в основном добавить подвид, чтобы имитировать ActionSheet как в этом примере:Неверная высота при добавлении подзаголовка автозапуска в приложении iOS

http://cocoaallocinit.com/2014/03/23/implementing-a-custom-uiactionsheet

Этот пример работает прекрасно до тех пор, пока я не использую autolayout на пользовательском ActionSheet. Когда у меня возникают проблемы. Подраздел, который я добавляю, состоит из одного красного представления. Этот красный вид имеет ограничения для его высоты и горизонтального и вертикального пространства.

xib

Моя проблема заключается в том, что высота не кажется правильным на 4S и 5S устройств. Вид становится выше на 5S, чем на 4S. Я ожидал, что это будет наоборот, поскольку у 5S больше очков, чем у 4S.

Side by side

Я добавить подвид с этим кодом:

[self.view addSubview:self.customActionSheet.view]; [self.customActionSheet viewWillAppear:NO];

Если я вместо этого добавить вид, нажав на нее:

[self.navigationController pushViewController:self.customActionSheet animated:YES];

Тогда результат как Я ожидал. 4S полностью закрыт красным видом, а у 5S все еще есть область над красным.

Что я здесь делаю неправильно?

+0

вы используете автоматическую раскладку или автоматического изменения –

ответ

1

Ваше представление не позволяет автоматически изменять размер экрана устройства. [UINavigationController pushViewController: animated:] будет работать, потому что навигационный контроллер задает рамку просмотра для вас. Быстрый способ сделать это установить кадр вашего представления с текущим представлением.

self.customActionSheet.view.frame = self.view.bounds; 

не вызывать viewWillAppear: себя, система будет вызывать его.

Мое предложение - использовать автомасштабирование, чтобы выполнить ваш взгляд на супервизор. Следующий код использует PureLayout: https://github.com/smileyborg/PureLayout

[self.view addSubview:self.customActionSheet.view] 
[self.customActionSheet.view autoPinEdgesToSuperviewEdgesWithInsets:UIEdgeInsetsZero]; 
0

Проблема заключается в том, что вам нужно добавить ограничения self.customActionSheet.view.

Когда вы загружаете представление контроллера сообщением pushViewController:animated:, система добавляет представление к необходимым ограничениям, чтобы заполнить все пространство экрана.

Вместо этого, если вы добавите его вручную (через сообщение addSubview:), ограничения autoulayouts не создаются автоматически, и вам необходимо создать и добавить их в представление программно.

я выкладываю здесь пример того, что вам может понадобиться, чтобы вы customActionSheet заполняет все пространство экрана:

NSLayoutConstraint *left = [NSLayoutConstraint constraintWithItem:self.view 
                     attribute:NSLayoutAttributeLeft 
                     relatedBy:NSLayoutRelationEqual 
                     toItem:self.customActionSheet.view 
                     attribute:NSLayoutAttributeLeft 
                    multiplier:1.0 
                     constant:0]; 

NSLayoutConstraint *top = [NSLayoutConstraint constraintWithItem:self.view 
                     attribute:NSLayoutAttributeTop 
                     relatedBy:NSLayoutRelationEqual 
                     toItem:self.customActionSheet.view 
                     attribute:NSLayoutAttributeTop 
                    multiplier:1.0 
                     constant:0]; 

NSLayoutConstraint *bottom = [NSLayoutConstraint constraintWithItem:self.view 
                     attribute:NSLayoutAttributeBottom 
                     relatedBy:NSLayoutRelationEqual 
                     toItem:self.customActionSheet.view 
                     attribute:NSLayoutAttributeBottom 
                    multiplier:1.0 
                     constant:0]; 


NSLayoutConstraint *right = [NSLayoutConstraint constraintWithItem:self.view 
                    attribute:NSLayoutAttributeRight 
                    relatedBy:NSLayoutRelationEqual 
                    toItem:self.customActionSheet.view 
                    attribute:NSLayoutAttributeRight 
                   multiplier:1.0 
                    constant:0]; 

[self.view addSubview:self.customActionSheet.view]; 
[self.view addConstraints:@[left, right, top, bottom]]; 
+0

Ограничения были уже добавлены в XIb-файле. Извините, что не объяснил это. – Espen

Смежные вопросы