我創建了自己的UITabBar
(只是一個UIView
實例)的實現。Autolayout:旋轉後的UIView幀錯誤
這個UIView
包含3個TabBarItem
實例。甲TabBarItem
是UIView
子類,並且每個包含以下UI控件:
UIImageView
UILabel
TabBarBadge
(定製UIView
子類)
我在一個佈局視圖層次結構使用自動佈局的故事板。
標籤欄項目的徽章應定位成使徽章的y中心與圖像視圖的頂部邊緣對齊,並且它應該與圖像視圖的右側對齊,同時4點重疊(所以,徽章的左邊緣與圖像視圖的右邊緣對齊,常數爲-4)。
這適用於加載應用程序時,無論是在縱向還是橫向模式。不管哪種情況,旋轉完成後,旋轉設備都會在徽章框架錯誤的地方旋轉。
下面是有問題的NSLayoutConstraint
的控制檯打印輸出:
<NSLayoutConstraint H:[UIImageView]-(-4)-[TabBarBadge] (active)>
這正是我所期待的那樣。
下面是來自TabBarBadge
有問題的控制檯打印輸出(肖像模式;正確演示):
<TabBarBadge frame = (80.6667 0; 36 20); text = '67'; autoresize = RM+BM>
下面是來自TabBarBadge
有問題的控制檯打印輸出(風景模式;不正確演示):
<TabBarBadge frame = (80.6667 0; 36 20); text = '67'; autoresize = RM+BM>
因此,當旋轉發生時,您可以看到框架未更改/更新。
這裏有幾個屏幕截圖:
肖像,正確的顯示
風景,不正確的顯示
約束(限制的打印輸出以上是從這個看法)
那麼,我有什麼困惑的是,其餘的TabBarItem
正在更新正確。 UIImageView
和UILabel
會自動更新。爲什麼這一幀沒有正確更新?
@matt你看到最後一張截圖嗎?它來自視圖調試器。而'NSLayoutConstraint'的打印輸出是高亮約束的描述。 – mbm29414
@matt是的。最後的截圖來自視圖調試器。 「NSLayoutConstraint」的打印輸出來自視圖調試器。他們不匹配。它顯示了一個正確配置的約束,但是該框架對於約束的設置不正確。我不確定你還有什麼其他建議。 – mbm29414
@matt我甚至改變了它,並刪除了我上面顯示的NSLayoutConstraint,用一個約束將視圖對齊到它的超級視圖的中心,向右偏移一個靜態數量(它將它放置在相同的位置地點)。發生同樣的問題。查看調試器仍然顯示徽章的正確設置。難道是因爲這個'UIView'子類有自己的'drawRect:'方法嗎?我想不出其他任何與這種觀點不同的東西。 – mbm29414