簡體   English   中英

Objective-c:UIStackView 的動態大小,取決於它的內容

[英]Objective-c: Dynamic size of UIStackView, depending of it's content

我有一個 UIStackView,它在滾動視圖中。 stackView 的內容是動態的,具體取決於使用“addArrangedSubview”方法創建和添加的視圖數量。 如果我有幾個子視圖,它們之間的間距就會很大,如果我有太多的視圖,它們就會被壓縮。

我有:

_viewController

|__ 視圖

|____滾動視圖

|______stackView(動態內容)

我將堆棧視圖設置為:

  • 對齊方式:填充
  • 分布:等間距
  • 間距:5,當然還有頂部/底部/前導/尾隨的約束

我想在每次添加視圖時增加 UIStackview 的大小,並保持我添加的子視圖的大小。 也許缺少某些東西,或者我有一個不好的理解..有人可以向我解釋如何做嗎?

我正在使用objective-c

我有一篇關於這個主題的詳細的Medium 帖子 您可以查看那里的分步指南。 但我也在這里添加一個簡短的解釋:

您應該為滾動視圖設置所有必要的約束到它的超級視圖。 然后是您的堆棧視圖,它是此滾動視圖的子視圖。 您可能也將此堆棧視圖的所有四個邊緣固定到滾動視圖。 但真正的擔憂來了。

UIScrollView不像其他視圖那樣工作。 它有一個contentView 此內容視圖負責滾動行為。 如果滾動視圖框架中容納不下的內容多於啟用滾動。

因此,為了正確設置內容視圖,滾動視圖必須知道內容視圖的大小,以便知道何時停止滾動。 這里的 size 表示實際的widthheight 但是這個大小不能從約束的設置中確定,因為它們是由自動布局引擎動態計算的。

在您的情況下,堆棧視圖充當滾動視圖的內容視圖。 您可能已將堆棧視圖的所有邊緣固定到它的超級視圖 - UIScrollView 但這還不足以讓滾動視圖計算內容大小。 您還必須提供:

  • widthheight - 如果您的滾動視圖可在兩個軸上滾動
  • width - 如果要垂直滾動並限制水平滾動
  • height - 如果要水平滾動並限制垂直滾動

由於您需要水平滾動,您必須通過提供等於滾動視圖的堆棧視圖的height來限制垂直滾動(它並不總是需要與滾動視圖的高度相同,但應該覆蓋整個高度通過其他方式滾動視圖)。 並且您還需要一個占位符x 軸約束來使Interface Builder滿意。 內容視圖的實際width將被添加到堆棧視圖的子視圖覆蓋。

重要提示:您應該將Horizo​​ntally in Container約束添加到堆棧視圖,並使其成為將在構建時移除的占位符。 您可以通過在文檔大綱中選擇約束並打開大小檢查器來完成此操作,您將在其中看到一個Remove at build time復選框。 你選中那個框,你就可以開始了。

使約束成為占位符

暫無
暫無

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

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