2016-02-25 61 views
1

我有一個嵌套的UIStackView,當我按下它的實例化按鈕。爲了更詳細地介紹,我有一個UIStackView,它遍歷一個充滿CustomUIStackViews的NSMutableArrayList,並將它們添加爲arrangeSubviews。當CustomUIStackViews啓動時,它們也遍歷它們自己的NSMutableArrayList,並用UIViews填充,並將它們作爲arrangeSubviews添加。UIStackView比賽情況?

奇怪的是,畢竟我的for循環執行我有一個的NSLog:

NSLog(@"parentstackview height is %f",_parentStackView.frame.size.height); 

它返回一個0(它不應該,高度應畢竟stackviews秀是1861年他們在模擬器中可以看到)。

但如果我創建這個方法:

- (void)testMethod{ 
    NSLog(@"parentstackview height is %f",_parentStackView.frame.size.height); 
} 

和以前與此更換的NSLog:

[self performSelector:@selector(testMethod) withObject:nil afterDelay:1.0]; 

然後返回1861酷似便應在1秒的延遲之後。

爲什麼1秒延遲會有所作爲?

回答

3

佈局傳遞可能沒有在您的代碼中完成,但稍後在運行循環中進行處理,該循環考慮了不同的值。

如果您需要使用實例化嵌套堆棧視圖的相同代碼中的大小,則需要調用layoutIfNeeded()以立即佈置所有子視圖。

您將不會在UIStackView文檔中找到這些詳細信息,因爲它在Laying Out子視圖下的堆棧視圖的超類UIView class reference中有記錄。