[英]IOS: Can't get UIViews to be the correct size with Rotation
我有一個簡單的應用,其中包含兩個UIView,較大的是通過界面生成器創建的,較小的是通過編程方式創建的:
在視網膜ipad模擬器上運行的“人像”中,較大的視圖比屏幕高。 在非視網膜iPad上,它是正確的高度。 在4英寸iPhone和3.5英寸iPhone上相同。
但是,當您旋轉設備時:
較大的視圖不再填滿屏幕。
很長時間以來,我一直在以編程方式迭代設置大小,我不知道是哪種方法。 這是我一直嘗試的非常簡單的版本:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInt
duration:(NSTimeInterval)duration {
CGRect screenBounds = [[UIScreen mainScreen] bounds];
self.webView.frame = screenBounds;
}
我還進行了其他數學運算,將大視圖的高度減少為小視圖的高度,這是可行的-但我仍然無法解決缺少屏幕填充問題或視網膜ipad上的高度問題較大的控件的高度太高。
我從錯誤的地方拿到尺碼了嗎? 有沒有辦法以編程方式確定狀態欄的高度? 還是只需要對20個像素進行硬編碼?
編輯:
進展緩慢。 使用這個:
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
CGRect screenBounds = [[UIScreen mainScreen] bounds];
self.webView.frame = CGRectMake(0, statusBarHeight, screenBounds.size.width, screenBounds.size.height - (smallView.size.height + statusBarHeight));
}
如果不對狀態欄的高度進行硬編碼,則現在不會覆蓋狀態欄。 除了在視網膜ipad上-狀態欄的高度顯示為較大視圖和較小視圖之間的間隙。 較大的視圖仍似乎超出了屏幕頂部,似乎比狀態欄的高度大。 在“橫向”中,較大的視圖仍無法填充屏幕的寬度。 仍在撓撓我的頭。
編輯2:我認為這個問題可能與這是一個通用應用程序有關,因此邊界始終被報告為480x320。 我知道如何降低屏幕的縮放比例,但這無法使我達到正確的尺寸。
您遇到的問題是,當將調用willRotateToInterfaceOrientation
時,它尚未旋轉,因此您正在讀取舊邊界。 我認為您想要didRotateFromInterfaceOrientation
。 這篇文章對這種情況下的最佳實踐很有幫助。
對於狀態欄,我使用以下宏:
#define statusBarHeight (([UIApplication sharedApplication].statusBarFrame.size.height < [UIApplication sharedApplication].statusBarFrame.size.width) ? [UIApplication sharedApplication].statusBarFrame.size.height : [UIApplication sharedApplication].statusBarFrame.size.width)
iOS中的旋轉處理需要重新考慮,但是對我來說,我總是在-(void)viewDidLayoutSubviews
設置新的尺寸,因為我可以確定已將新尺寸分配給框架。
我同意“ M. Porooshani”。
順便說一句,如果您需要非常自定義的布局,請繼續使用大量的viewDidLayoutSubviews和類似的東西,但是對於簡單的情況,讓約束來完成工作要好得多。 代碼中的計算和布局可能非常困難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.