2015-07-11 68 views
1

靈感來自Scott Sherwood tutorial我有一個UIView裏面的UIViewController通過自定義segues收取不同的UItableviewController/UIViewController。addChildViewController不適合UIViewController

enter image description here

segue.m

- (void) perform { 

DashboardViewController *controller = (DashboardViewController *)self.sourceViewController; 
UIViewController *dst = (UIViewController *) self.destinationViewController; 

for(UIView *view in controller.container.subviews){ 
    [view removeFromSuperview]; 
} 


controller.currentViewController = dst; 
[controller addChildViewController:dst]; 
[controller.container addSubview:dst.view]; 
} 

第一賽格瑞被稱爲在viewDidLoad方法

Controller.m或者

- (void)viewDidLoad { 
[super viewDidLoad]; 
[self performSegueWithIdentifier:@"dashboardNewPon" sender:[self.buttons.subviews objectAtIndex:0]]; 
} 

,屏幕開始以這種方式

enter image description here

其他塞格斯,有這種行爲

enter image description here

我不明白爲什麼,但它肯定不會自動佈局。

感謝

回答

1

我找到了解決辦法article

此行之後

[controller.container addSubview:dst.view]; 

我加入這個

dst.view.translatesAutoresizingMaskIntoConstraints = NO; 

[controller.container addConstraint:[NSLayoutConstraint constraintWithItem:dst.view 
                  attribute:NSLayoutAttributeTop 
                  relatedBy:NSLayoutRelationEqual 
                   toItem:controller.container 
                  attribute:NSLayoutAttributeTop 
                  multiplier:1.0 
                  constant:0.0]]; 

[controller.container addConstraint:[NSLayoutConstraint constraintWithItem:dst.view 
                 attribute:NSLayoutAttributeLeading 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:controller.container 
                 attribute:NSLayoutAttributeLeading 
                multiplier:1.0 
                 constant:0.0]]; 

[controller.container addConstraint:[NSLayoutConstraint constraintWithItem:dst.view 
                 attribute:NSLayoutAttributeBottom 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:controller.container 
                 attribute:NSLayoutAttributeBottom 
                multiplier:1.0 
                 constant:0.0]]; 

[controller.container addConstraint:[NSLayoutConstraint constraintWithItem:dst.view 
                 attribute:NSLayoutAttributeTrailing 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:controller.container 
                 attribute:NSLayoutAttributeTrailing 
                multiplier:1.0 
                 constant:0.0]]; 
+0

是的,您還需要約束。對不起,我認爲你已經將它們添加到界面構建器中。 –

+0

但是,如何在界面構建器中添加啓動後將添加的約束條件?謝謝! – Vins

+1

現在我看到你添加了dst.view和容器之間的約束,而我正在談論容器和controller.view之間的約束。我不需要爲添加的子視圖添加約束條件,但是如果您這樣做,則您提供的代碼是正確的。 (無論如何,我更新了我的答案,因爲我忽略了容器框架的起源。) –

1

我想你應該後

controller.currentViewController = dst; 

加入這一行

CGRect dstFrame = CGRectMake (0, 0, controller.container.frame.size.width, controller.container.frame.size.height);  
dst.view.frame = dstFrame; 

並調用viewWillAppear中第一SEGUE:通過閱讀這篇

+0

謝謝你,但現在控制器是http://postimg.org/image/m951c89yl/ – Vins

+0

的代碼是相同或我錯了嗎? viewWillAppear不會更改結果 – Vins