2014-09-12 3 views
3

Просто добавление подпрограммы UIView от контроллера, создающего с помощью instantiateViewControllerWithIdentifier текущее представление контроллеров и добавление ограничений для поддержки размера нового подсмотра для покрытия всей области. Код ниже работал в iOS 7. iOS 8 позволяет подобрать небольшую часть верхнего левого угла. iOS 7 делает то, что я ожидаю, а именно размер подзаголовка по всему размеру родительского представления. Я бы приложил изображение, но у меня его нет. Установка translatesAutoresizingMaskIntoConstraints в YES устраняет проблему, но тогда представление не соблюдает ограничения и изменяет размер при изменении ориентации или изменении размера.Ограничения для subview, не работающих в iOS 8, XCode 6 (6A313). Работы iOS 7

spotCheckStoresViewController = [self.storyboard  instantiateViewControllerWithIdentifier:@"visitStoresViewController"]; 
spotCheckStoresViewController.mainViewController = self; 
spotCheckStoresViewController.dataMode = kDataModeViews; 
spotCheckStoresViewController.lastRow = [self getViewsLastRow]; 
spotCheckStoresViewController.view.tag = -200; 

currentView = spotCheckStoresViewController.view; 

[self addChildViewController:spotCheckStoresViewController]; 

[self.view insertSubview:currentView belowSubview:_menuViewController.view]; 

currentView.translatesAutoresizingMaskIntoConstraints = NO; 

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:currentView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0.0]]; 

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:currentView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:0.0]]; 

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:currentView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]]; 

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:currentView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0]]; 

//[self.view updateConstraints]; 
//[self.view layoutIfNeeded]; 

Я попытался установить рамку подзапроса. Любые идеи, которые могли бы измениться в iOS 8, чтобы изменить поведение ограничений, используемых таким образом?

+0

Я исправил это для себя, добавив еще один подраздел UIView к контроллерам основной UIView в ИБ, устанавливая ограничения на то, чтобы прилипнуть к ведущей, задней, верхней и нижней, а затем добавить свой первоначальный вид вложенного к этому ребенку UIView. Кажется, чтобы выполнить эту работу. – bavelasq

+0

в iOS 8 добавлено несколько новых руководств по макетам '' 'leftLayoutGuide''' и' '' rightLayoutGuide'''. вы можете попробовать установить свои ограничения для них, но помните, что это не доступно до iOS 8. –

+0

Это не относится к вашему вопросу, но вы забываете называть 'didMoveToParentViewController:'. – matt

ответ

0

В моем случае проблема связана с ограничениями, обозначенными как UIView-Encapsulated-Layout-Width и UIView-Encapsulated-Layout-Height. Когда я их удалял, все вел себя так, как будто мой взгляд был нулевого размера, и все было сосредоточено в верхнем левом углу экрана. Когда я их оставил, новые ограничения работали, как ожидалось. Я также сохранил ограничения, обозначенные как _UILayoutSupportConstraint.

0

В моем случае это происходило только на iOS 8.3. Был конфликт с существующими ограничениями. Коллега обнаружил, что мне нужно сначала удалить любые существующие ограничения, прежде чем добавлять другие.

[self.view removeConstraints:self.constraints]; 
Смежные вопросы