[英]Custom UIView How to Respond to Constraint-based frame changes
我有一個容器UIView,它的約束會導致其更改高度以匹配舊的3.5英寸iPhone或新的4英寸iPhone。 在該容器UIView中,我有一個自定義UIView的多個副本,我們將其稱為DynamicButton
。 DynamicButton
具有三個子視圖,這些子視圖使用其框架進行布局(無約束),並且每當調用[DynamicButton -setFrame]
時,都會重新計算這三個子視圖的框架
設置了我的約束,以便我的DynamicButton
視圖將以相等的高度填充整個容器視圖。
在viewDidLoad
和viewWillAppear
中,我的containerView的高度是它在情節viewWillAppear
的高度(與設備無關)。 我的DynamicButton
的高度為58
像素。
在viewDidAppear
,約束最終生效,並且當在舊的3.5英寸iPhone上顯示時,containerView的高度被減小為正確的值,而我的DynamicButton
的高度為47
像素。
但是,我的DynamicButton
類更改大小時從不會收到setFrame
消息。
我需要重寫哪種方法來攔截該大小變化,以便重新配置子視圖上的框架?
覆蓋DynamicButton
layoutSubviews
在那里設置子視圖的框架。
從layoutSubviews
的文檔中:
[...]子類可以根據需要重寫此方法,以對其子視圖執行更精確的布局。 僅當子視圖的自動調整大小和基於約束的行為沒有提供所需的行為時,才應覆蓋此方法。 您可以使用實現直接設置子視圖的框架矩形。 [...]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.