我是一名新的開發人員iOS。如何通過自動佈局獲得實際大小的UIView
我使用自動佈局。
我有一個問題。約束後我無法獲得真實大小的UIView。
例如,當我想要得到的UIView
大小與約束
self.container.frame.size.height
它送花兒給人的所有設備大小返回550。但是當我在不同的設備上運行它時,我可以看到它有不同的大小。
感謝
我是一名新的開發人員iOS。如何通過自動佈局獲得實際大小的UIView
我使用自動佈局。
我有一個問題。約束後我無法獲得真實大小的UIView。
例如,當我想要得到的UIView
大小與約束
self.container.frame.size.height
它送花兒給人的所有設備大小返回550。但是當我在不同的設備上運行它時,我可以看到它有不同的大小。
感謝
最簡單的解決方法就是運行-viewDidAppear:
代碼(自動版式已運行後)。
最好的時刻是在viewDidLayoutSubviews
期間,因爲它發生在viewDidAppear
之前,因此您仍然可以在顯示視圖之前做一些修改。
你可以只使用UIView
方法intrinsicContentSize
這應該是正確的答案。如果您以編程方式進行自動佈局,而不是明確設置框架,則這是根據內容獲取高度/重量的正確方法。 – Marquis103
你的 「得到真正的尺寸代號」 之前,插入下面的代碼:
[view setNeedsLayout];
[view layoutIfNeeded];
恕我直言,不需要同時調用'[view setNeedsLayout]'和'[view layoutIfNeeded]',只有後者對於'viewWillLayoutSubviews'中的我來說已經足夠了。 – schmidt9
它不起作用 –
由於每個人都認爲訪問是通過完成的而不是在UIView
子類中,答案並不證明真的有用。獲得UIView
子類的正確大小的正確方法是layoutSubviews
。
[view layoutIfNeed]救救我。
使用此方法可在繪製之前強制子視圖的佈局。使用接收消息作爲根視圖的視圖,此方法將從根開始的視圖子樹佈局。
調用此方法後,我可以在xib中獲得自定義視圖的實際大小。 非常感謝@Allen和作者。
這太棒了。
如果你想獲得幀沒有自動佈局在使用過程中使用layoutsubviews方法,使用這一個:
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"View frame: %@", NSStringFromCGRect(view.frame));
})
謝謝你的想法。這裏沒有什麼奇怪的:你在回到主調度隊列後要求調用這個代碼。這將在自動佈局發生後發生。的確非常有用! – ishahak
謝謝。薩姆說並不奇怪。也是比這個子類更好的解決方案。 –
好像- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize;
是你在找什麼:
返回值
的滿足其約束條件的視圖大小。討論
確定視圖的最佳尺寸,考慮它所擁有的所有約束及其子視圖的最佳尺寸。
感謝。但如何做,如果我想在viewDidLoad中獲得真正的大小。你有任何解決方案? – Chicken
@Chicken見艾倫的解決方案。這將強制自動佈局立即運行。你真的應該避免做這種事情,尤其是不止一次。 – Oxcug