簡體   English   中英

iOS:無法通過旋轉將UIViews設置為正確的大小

[英]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.

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