2013-10-01 16 views
2

語境/我想要做的使用約束,以保持兩個TableViews相同的高度和相同的距離除了

  • 我建立這個適用於iOS 7
  • 我使用的是故事板
  • 我有兩個UITableViews,我想保持相同的高度和 距離間隔,保留所以從4英寸SCR移位3.5 & 4英寸設備
  • 之間的視覺一致性EEN至3.5英寸的屏幕,我想爲:
  • 意見表中得到較短,但仍然高度
  • 相等的頂級表視圖保持相同的Y位置
  • 對於底部的表視圖,以改變其您需要保持頂部桌子視圖底部和底部桌子視圖頂部之間的距離相同。 AKA它們之間的相同的間隙

enter image description here

我已經試過

  • 在故事板使用圖釘圖標我選擇了這兩個TableViews並設置其高度相等且將此代碼包含在視圖控制器中:

[se lf.topTableView addConstraint:[NSLayoutConstraint constraintWithItem:self.bottomTableView 屬性:NSLayoutAttributeBottom relatedBy:0 toItem:self.bottomTableView屬性:NSLayoutAttributeTop 乘數:1常數:30]];

問題

  • 我如何讓他們在同一高度,同時保持相同的距離

更新

enter image description here

+0

那麼當屏幕尺寸發生變化時,你想要改變什麼?有些東西必須有所不同。您是否希望桌面視圖在較短的屏幕上縮短(但高度相等)? – rdelmar

+0

是的,這是正確的 - 更短,但高度相等。 &對於頂部表格視圖來保留它的Y POS和底部表格視圖以向上移動以保持兩個表格視圖之間的相同距離。 – drc

+0

請考慮將其中一個答案標爲「已接受」。 – jemmons

回答

0

頂部表格視圖應該對superview(或頂部佈局約束)的頂部,對底部表格視圖的垂直間距約束和高度約束具有約束。底部表格視圖應該對超級視圖的底部和頂部表格視圖具有相同的高度限制進行約束。你所需要的關鍵的一點,是讓頂級表視圖的高度約束的優先級小於1000,因此,當屏幕的高度變化,有一件事是不是強制性的(即< 1000高度約束)將是調整的東西。所有這些都可以在IB中設置。

編輯後:

其實,你並不需要在頂部表視圖的高度約束的。由於我對superview的頂部和底部以及兩個表視圖之間有一個約束,因此具有使表視圖的高度相等的約束是您所需要的。

+0

謝謝!現在試用 – drc

+0

這似乎並沒有爲我工作。我應該向你發送文件嗎? – drc

+0

@drc,什麼不工作?它有什麼作用?我測試了這個,它對我來說非常合適。 – rdelmar

3

查看Apple suggested way to do this(位於標題爲「在視圖之間創建相等間距」的部分)。

編輯:蘋果現在傾向於爲此目的使用堆棧意見。請參閱this WWDC 2013 video for OS Xthis iOS one from WWDC 2015

它們不提供僅限制解決方案。相反,他們建議在可見視圖之間放置隱藏的「間隔視圖」。

這背後的推理來源於約束系統的工作方式。約束關係總是嚴格限定在兩個對象之間。在間隔約束中,那個關係必須是之間的東西是被隔開的,它的東西是X空間。而已。第三個關係沒有空間讓空間(本身是關係的結果)等於某個其他值。

另一方面,高度(和寬度)約束不是關係。你可以用一個與其他任何東西無關的簡單常量來設置事物的高度。因此,有「空間」來指定與另一個對象的關係 - 例如,高度應該等於另一個高度(或寬度,或其他)。

所以,如果你發現自己想要約束都以某種方式相互關聯,那麼請看高度和寬度而不是空格。在你的具體例子中,你可以用隱藏的UIView來包圍你的UITableView,將它們的高度設置爲相等,並將它們的空間設置爲鄰居/容器至0或其他一些低常數。

作爲額外的獎勵,這是所有可能的IB。不需要自定義代碼或子類。