![](/img/trans.png)
[英]iOS7 : View talking portrait frame when loading child view controller from landscape mode
[英]Landscape frame when in Portrait mode
是否可以檢索 UIView 在橫向模式下的框架,而設備/接口處於縱向模式? 如果是這樣,這是如何完成的?
MrThys,你應該知道你的視圖應該如何,無論是縱向還是橫向模式。 之后,您可以將它們定義為常量,如下所示:
#define myViewPortrait CGRectMake(0.0f, 0.0f, 768.0f,1024.0f)
#define myViewLandscape CGRectMake(0.0f, 0.0f, 1024.0f,768.0f)
然后,當您的設備改變方向時,您可以使用這些值。 :)
並不真地。 您知道屏幕的尺寸只會交換寬度和高度。 但是,如果狀態欄可見,則可用區域會有所不同(例如,iPhone 上縱向為 320x460,橫向為 300x480),然后如果您使用的是 UINavigationController 或類似設備,則必須考慮其鍍鉻,然后,如果您的視圖不是容器視圖 controller 中視圖 controller 的頂級視圖,則您還必須考慮各種自動調整大小掩碼和任何自定義布局代碼。
為什么你甚至需要這個? 通常,您應該只響應您在 UIViewController 的willRotateToInterfaceOrientation:duration:
或 UIView 的layoutSubviews
中給出的大小。
我不知道這樣做的可靠方法。 在我的一個項目中,我使用了UIApplicationWillChangeStatusBarOrientationNotification
。 查詢視圖的frame
或bounds
屬性會返回不一致的結果,具體取決於視圖是否被另一個視圖覆蓋(也可能存在其他中斷情況)。 也許willRotateToInterfaceOrientation:
方法內部的情況有所不同。
就我而言,我最終實現了自己的方法來找出視圖邊界:
- (CGSize)currentViewSizeWithOrientation:(UIInterfaceOrientation)orient
{
CGSize size = self.currentView.bounds.size;
CGSize result;
if (UIInterfaceOrientationIsPortrait(orient))
result = CGSizeMake(fminf(size.width, size.height),
fmaxf(size.width, size.height));
else
result = CGSizeMake(fmaxf(size.width, size.height),
fminf(size.width, size.height));
return result;
}
在您的情況下,您可以嘗試從 Nib 加載視圖框架后找出它。 然后,要么推導出橫向的框架,要么在 Interface Builder 中顯式設置框架,並在代碼中為兩個方向復制它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.