2014-09-12 138 views
3

只需將控制器的子視圖UIView添加到當前控制器視圖並添加約束條件,以使用instantiateViewControllerWithIdentifier創建的子控制器覆蓋整個區域。下面的代碼適用於iOS 7. iOS 8將子視圖的大小設置爲左上角的一小部分。 iOS 7完成了我期望的功能,即在父視圖的整個大小上調整子視圖的大小。我會附上一張圖片,但沒有代表。將translatesAutoresizingMaskIntoConstraints設置爲YES可以解決問題,但視圖不遵守約束,並在方向更改或調整大小更改時調整大小。子視圖不適用於iOS 8,XCode 6(6A313)的約束。 Works 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的IB中,對設置約束粘在前置,頂部和底部,然後將我原來的子視圖解決了這個問題我自己給那個孩子UIView。似乎要完成這項工作。 – bavelasq 2014-09-12 22:22:16

+0

在iOS 8中增加了一些新的佈局指南,「leftLayoutGuide」和「rightLayoutGuide」。你可以嘗試設置你的約束條件,但請記住,這在iOS 8之前是不可用的。 – 2014-09-12 22:26:27

+0

這與您的問題無關,但您忘記調用'didMoveToParentViewController:'。 – matt 2014-09-12 22:27:23

回答

0

在我的情況下,問題與標記爲UIView-Encapsulated-Layout-WidthUIView-Encapsulated-Layout-Height的約束有關。當我刪除它們時,所有事情都表現得好像我的視圖的大小爲零,所有內容都集中在屏幕的左上角。當我離開他們時,新的限制按預期工作。我還保留了標有_UILayoutSupportConstraint的限制條件。

0

在我的情況下,它只發生在iOS 8.3上。與現有限制有衝突。一位同事發現,在添加其他人之前,我需要首先刪除任何現有的限制條件。

[self.view removeConstraints:self.constraints]; 
相關問題