簡體   English   中英

使用自動布局將視圖浮動到第二行

[英]Floating view into second row with autolayout

我可以在情節提要視圖控制器視圖上設置約束嗎,以便在有足夠水平空間時將三個視圖彼此相鄰。 在其他情況下,它會將視圖之一“浮動”到下一行嗎?

像這個例子:

  1. 足夠的空間 足夠的空間

  2. 導致第三個視圖“浮動”的文本 在此處輸入圖片說明

也許堆棧視圖可以幫助您?

沒有理由期望自動布局系統能夠做到這一點,也沒有理由。

您要在這里使用的是一個集合視圖UICollectionView ),並使每個視圖成為集合視圖中的一個單元格。 實際上,如果您查看自己的視圖,則它們看起來相當可重復使用,每個視圖都有一個圖標,一個標題和一個詳細文本。 可以設置一個收集視圖,將單元格彼此相鄰放置,直到沒有更多空間,之后再在下面添加單元格,依此類推。

然后,您可以使用自動布局將場景設置為圍繞集合視圖進行布局,其中當集合視圖的高度增加時,其他視圖將正確地重新定位在集合視圖內容下方。

請參閱布局作為所需示例。

有沒有辦法在故事板自動漂浮到一個新行,如果他們不屬於同一行設置的意見和約束。

(我認為這是自動版式系統的一大弱點。)

其原因在於約束的概念:在數學上,它們表示線性方程 ,通常對於x和y維獨立的 唯一的例外是寬高比約束,這些約束將視圖的寬度與該(或另一個)視圖的高度聯系起來。 但是我想不出一種方法,如何在需要時使用寬高比約束將視圖分成新的一行。

當系統在運行時解決您的約束並計算視圖的實際框架時,它只需為每個維度(或兩個維度(如果存在寬高比約束))求解線性方程組。 在自動布局系統中添加浮動視圖選項會使整個布局過程變得更加復雜,因為您不能將這種行為描述為簡單的線性方程式。

(堆棧視圖也無濟於事,因為它們也只適用於一個維度:x或y。)

最近,我需要與您描述的非常相同的浮動行為,並創建了UIViewFloatingContainerView子類。 我對其進行了概括,因此您可以將其用於任何視圖並將其翻譯成Swift。

您現在可以在GitHub上找到它:

https://github.com/mischa-hildebrand/FloatingContainerView

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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