2017-02-10 20 views
0

我正在設計一個swift應用程序,顯示一張照片,地圖和內容 - 所有這些在UITableView標題中。爲什麼我的約束在iPhone 5和iPhone 6上運行應用程序時使佈局不同?

當我運行在iPhone 5上的應用程序,它看起來像這樣:

enter image description here

黃色的領域是具有以下約束文本視圖:

enter image description here

和:

enter image description here

這看起來對iPhone 5的精美然而,當我在iPhone上運行6,我看到:

enter image description here

我不明白爲什麼這兩個不同意見。現在

,在我的代碼,在viewDidLoad()我對方法的調用:

defineHeaderView() 

,基本上用數據填充的報頭視圖(例如填充了用戶名,文本,照片)。

我也有這個代碼塊:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    sizeHeaderToFit() 
} 

func sizeHeaderToFit() { 
    let headerView = myTable.tableHeaderView! 

    headerView.setNeedsLayout() 
    headerView.layoutIfNeeded() 

    let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height 
    var frame = headerView.frame 
    frame.size.height = height 
    headerView.frame = frame 

    myTable.tableHeaderView = headerView 
} 

storyboard我定義headerview爲UITableView內部的視圖:

enter image description here

你能解釋我爲什麼認爲兩個屏幕都不一樣?

爲了提供更好的洞察,這裏有其他方面的限制:

地圖:

enter image description here

和背景的照片即是在這裏:

enter image description here

有以下約束條件:

enter image description here

+0

我猜問題是你的imageViews。 iPhone 5的屏幕比較薄,並且取決於您的圖像和約束的大小,(如果clipSubviews設置爲true/false),圖像看起來會非常不同。 – PeejWeej

+0

您應該嘗試調試不同設備上的視圖層次結構,以檢查實際框架/約束是什麼 – PeejWeej

+0

沒有足夠的關於視圖名稱和其他約束的信息。所以這只是一個假設: 您的視圖高度約束(黃色)與「大於或等於」相關。根據你的第二個約束,你的觀點的頂端應該是父母頂端的644點 - 這是一個靜態值。因此,對不同尺寸(高度)設備上的觀點將在高度拉伸。 –

回答

0

請刪除UILabel的頂部約束。

+0

當我刪除頂部的約束,然後我的'UILabel'進入屏幕的最頂端... – user3766930

+2

我不知道這是否是一個有效的答案,但它會是一個*更好*答案,如果你添加一個解釋*相關爲什麼*這將解決這個問題。 – dfd

+0

我剛剛在原始問題中添加了有關約束的更多信息 – user3766930

相關問題