關於通過將UINavigationBar插入到場景中來設計您自己的視圖控制器,我發現許多有關如何在旋轉設備時幀高度不會改變的問題的參考。這與Apple如何在其導航控制器中使用UINavigationBar的方式形成鮮明對比,該控制器的旋轉高度會發生變化。UINavigationBar旋轉和自動佈局
儘管有些建議事實上顯示如何改變高度以與Apple所做的一致,但所有答案都沒有解決與場景中其他視圖的適當關係。特別是,在構建一個使用autoLayout的場景時,你不應該調整框架 - 自動佈局是通過你定義的約束爲你設計的。
例如,一個suggestion是要做到這一點:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[self.navigationBar performSelector:@selector(sizeToFit) withObject:nil afterDelay:(0.5f * duration)];
}
雖然這將改變大小,其他視圖的關係不再正確。儘管上述示例中的海報確實提供瞭解決調整關係的解決方案,但這更像是一種硬編碼的方法,並非Apple可能提出的一種方法,即不是適用於AutoLayout的解決方案。
通過實驗,我注意到,在旋轉設備時,intrinsicContentSize實際上確實改變了,但是框架沒有改變。在注意到這一點,我試過如下:
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
CGRect frame = self.navigationBar.frame;
frame.size.height = self.navigationBar.intrinsicContentSize.height;
self.navigationBar.frame = frame;
}
雖然這並適當改變大小,就像上面的例子中,它也造成了不正確觀點的關係。
具體來說,我的設備在景觀:
然後切換到肖像:
是任何人都知道蘋果怎麼要我們使用約束來解決UINavigationBar的佈局?
是的,這個建議將有助於上面的例子。但是,代碼是必需的,因爲導航欄的高度需要調整 - 這真的是帖子的要點。此外,我們的目標是在條形尺寸發生變化時保持按鈕和條之間的空間。 – zinc1oxide
@ zinc1oxide,看起來他正在談論iPhone自動旋轉時的高度變化 - 沒有代碼是必要的。 – rdelmar
旋轉時沒有自動高度變化。在上面的建議中,更改按鈕約束不會影響導航欄在旋轉時的高度。如果你知道通過定義約束來改變高度的方法,那將是理想的。 – zinc1oxide