簡體   English   中英

縱向模式下的橫向框架

[英]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 查詢視圖的framebounds屬性會返回不一致的結果,具體取決於視圖是否被另一個視圖覆蓋(也可能存在其他中斷情況)。 也許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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM