2013-03-11 198 views
1

我試圖以編程方式將UITableView添加到我的視圖中,但如下設置其參數不起作用(最後一個單元格被裁剪)。什麼是iPhone屏幕頂部狀態欄的確切大小?

table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) style:UITableViewStylePlain]; 

我試着用460代替高度,效果很好。但是,我想知道這個酒吧的確切大小:

enter image description here

感謝您的幫助。

+0

不硬編碼屏幕功能的大小!你將在稍後被擰緊。 'UIViewController'應該適合你的視圖大小 - 確保你正確地設置了自動調整大小或者彈出&struts。 – nielsbot 2013-03-11 23:03:54

+0

即問題在於別處。 – nielsbot 2013-03-11 23:04:21

+0

也稱爲「狀態欄」 – nielsbot 2013-03-11 23:04:56

回答

6

您絕不應該在代碼中的任何位置硬編碼高度的確切值。

只要你使用默認的UI組件(UINavigationController/UITableView/UICollectionView /等),你通常不需要擔心狀態欄高度在所有。這些ViewController應該在任何設備和任何方向上正確佈局。

如果你有自定義佈局的需要,你應參考safeAreaLayoutGuideUIView,而不是硬編碼的高度: https://developer.apple.com/documentation/uikit/uiview/2891102-safearealayoutguide?language=objc


但是,爲了使這個答案完成 - 在狀態欄的大小

  • 大多數設備到iPhone X有肖像用20pt高度:在不同的設備和不同的方向不同風景。
    (20像素,40像素,60像素的@ 1X,2X @,@ 3倍)
  • iPhone X縱向它是44pt(所以44px,88px,132px相應)。
    在風景中,高度雖然不同。
+1

實際上,在非視網膜上是20px或在視網膜上是40px ......無論哪種方式,它是20點,但+1,我同意「你不應該在你的代碼中需要這個值。」 – 2013-03-11 23:03:40

+0

更新爲點。 – calimarkus 2013-03-11 23:04:50

+0

我剛剛通過創建一個新的單一視圖應用程序嘗試了一下,然後在我的ViewController中添加了一個UITableView,它使用'[self.view addSubview:table];'添加,這可能是因爲它。這種做法有什麼問題嗎? – Rob 2013-03-11 23:20:01

1

您的父視圖控制器將調整它的視圖大小。您可以

  • 使您的視圖控制器加載的UIView的子類,覆蓋-layoutSubviews
  • 用適當的起始大小([[ MyViewClass alloc ] initWithFrame:superview.bounds])和適當的自動尺寸面具插入您的子視圖。在使用自動調整struts &彈簧時,您必須爲視圖提供合適的大小。

順便說一句 - 硬編碼狀態欄高度的另一個問題:有時是雙高度。 (當用戶錄製音頻,撥打電話,使用網絡共享,使用導航等)

+0

好吧,我明白,非常感謝。 – Rob 2013-03-12 07:56:21

1

這個答案是搶在評論原來的問題的問題:

所以,如果我不要硬編碼我的屏幕大小,我怎麼能自動設置它以適應我的UIViewController?

試試這個:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    table = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; 
    // all other table setup 
    table.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    [self.view addSubview:table]; 
} 

這是假設您想要的表視圖,以填補視圖控制器的看法。根據需要調整。

這將確保表視圖的大小隨着視圖控制器視圖大小的改變而改變。這包括旋轉,通話狀態欄等。

+0

非常感謝代碼和解釋,非常清楚:) – Rob 2013-03-12 07:52:44

1

您不應該使用設置的像素尺寸來在屏幕上顯示尺寸。使用你的觀點的框架。即

table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain]; 

無論如何。這是20分。 20px非視網膜。 40px視網膜。

0

更新iPhone X

以前,所有的iPhone設備有20pt的狀態欄的高度。但在iPhone X上,它是44pt。所以在實現你的UI時要小心。