2011-05-02 93 views
12

如何根據應用程序當前運行的設備的分辨率和方向以編程方式獲取UIPickerView實例的默認高度?默認UIPickerView高度

我不想爲此參數使用硬編碼值,因爲新設備將支持不同的屏幕分辨率,因此會確定此組件具有不同的默認大小。

+0

你可以使用上UIPickerView – killianke 2017-09-26 16:27:46

回答

1

如果您創建一個高度爲0的實例,它將被適當的默認高度覆蓋,並且您可以獲取其frame.size.height

但是,在iPad上這將發出警告(幾天前測試)。我最終不得不使用iPad的硬編碼值...

P.S.這是爲了一個UIDatePicker;不確定它是否與UIPickerView完全相同。

+0

的intrinsicContentSize.height財產是否有不發出警告的任何可能的方式?使用系統強制來添加一個推薦具有默認大小的組件似乎很棘手。 – luvieere 2011-05-02 10:57:54

+0

爲了澄清,我提到的這個「警告」只是系統打印到控制檯的消息。此警告包括建議的默認高度,這是我最終在代碼上設置的硬編碼值。如果你這樣做,你沒有得到任何警告。就像我說的,如果您將默認值設置爲0(然後讀取系統設置的值),您將不會在iPhone/iPod上看到這些警告,而只會在iPad上顯示。 – 2011-05-02 11:12:14

+0

我在iOS 4.2上也收到了警告消息,通知我控件的大小已被默認爲適當的大小。 – luvieere 2011-05-02 12:05:20

-1

您可以使用uipickerview的frame屬性。

15

André看到的警告似乎不再發生(XCode 4.2; iOS SDK 5.0)。如果您有initWithFrame創建它,並給它的零高度,你就可以讀回它的高度從frame.height屬性:

uiPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 77, 320, 0)]; 
DLog(@"uiPickerView=%@",uiPickerView); 

給出:

uiPickerView=<UIPickerView: 0x9a28c40; frame = (0 77; 320 216); layer = <CALayer: 0x9a28d00>> 

所以216是默認的高度。

我在頭文件中找不到這個定義,所以讀回來似乎是最安全的方法。

可以設置一個非零高度的框架,但蘋果公司表示不這樣做,它似乎會導致渲染問題。

+0

在縱向iPhone上,216仍然是正確的(截至iOS 10和iPhone 7)。然而,在風景中,當我打印框架時,它是162。 – user1687195 2017-08-04 20:25:46

0

對於自動佈局,我想知道同樣的原因,因爲您無法將其固定在底部。

默認高度沒有變化的UIPickerView是216px** UIPickerView**