首頁>Program>source

我覺得這是顯示/隱藏 UIViews的相当普遍的範例 ,最常见的是 UILabels ,具體取決於業務邏輯.我的問题是,使用AutoLayout响應隱藏视圖的最佳方法是什麼,就像它们的框架是0x0一樣.這是一个由1-3个功能組成的動態列表的示例。

現在我从按钮到最後一个標簽有10px的頂部空間,当標簽被隱藏時,顯然不会向上滑動.截至目前,我已经為此約束建立了出口,並根据要顯示的標簽數修改常數.因為我使用負常量值將按钮向上推到隱藏幀上,所以這顯然有點不客气.這也很糟糕,因為它不局限於實際的佈局元素,仅基於已知高度/其他元素的填充进行隱蔽的靜態計算,並且顯然与AutoLayout的用途有所抵觸.

顯然,我可以根据我的動態標簽建立新的約束,但這要尝試摺疊一些空白,這需要大量的微观管理和冗长的工作.有更好的方法吗? 更改幀大小0,0並让AutoLayout無需約束即可操作吗? 完全删除视圖?

不過,老實說,仅从隱藏视圖的上下文中修改常量就需要一行代碼,並且計算簡單.用 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:重新建立新的約束 看起来好重。

Edit Feb 2018 :請參阅本与 UIStackView的答案

最新回復
  • 5月前
    1 #

    UIStackView 這可能是iOS 9+的方法.如果設置正確,它不仅可以處理隱藏的视圖,而且還可以消除其他間距和邊距。

  • 5月前
    2 #

    我个人顯示/隱藏视圖的偏好是建立一个具有適当宽度或高度約束的IBOutlet.

    然後我更新 constant0的value 隱藏,或顯示任何值。

    该技術的最大優點是將保持相對的約束.例如,假設您有一个视圖A和一个视圖B,它们的水平間隙為x.查看時宽度 constant 設置為 0.f 然後视圖B將向左移動以填充该空間。

    無需添加或删除約束,這是一項重量級的操作.只需更新約束的 constant 会解決問题的。

  • 5月前
    3 #

    使用常量 0的解決方案 處於隱藏狀態時,如果再次顯示该常量,則该常量可以起作用,但是如果內容的大小靈活,則不能令人满意.您需要衡量您的靈活內容並設置一个常數.這感覺不對,並且如果內容由於服務器或UI事件而更改大小,則会出現問题。

    我有一个更好的解決方案。

    我们的想法是在隱藏元素時將高度為0的規則設置為高優先順序,以使其不占用自動佈局空間。

    這是您的操作方式:

    1. set up a width (or height) of 0 in interface builder with a low priority.

    Interface Builder不会對冲突大喊大叫,因為優先順序较低.通過將優先順序臨時設置為999来測試高度行為(禁止以程式設計方式更改1000,因此我们不会使用它).介面構建器現在可能会大喊冲突約束.您可以通過將相關物件的優先順序設置為900左右来解決這些問题。

    2. Add an outlet so you can modify the priority of the width constraint in code:

    3. Adjust the priority when you hide your element:

    cell.alertTimingView.hidden    = place.closingSoon != true
    cell.alertTimingWidth.priority = place.closingSoon == true ? 250 : 999
    

  • 5月前
    4 #

    在這種情况下,我將Author標簽的高度對映到適当的IBOutlet:

    @property (retain, nonatomic) IBOutlet NSLayoutConstraint* authorLabelHeight;
    

    当我將約束的高度設置為0.0f時,我们保留了"填充",因為"播放"按钮的高度允许這樣做。

    cell.authorLabelHeight.constant = 0; //Hide 
    cell.authorLabelHeight.constant = 44; //Show
    

  • 5月前
    5 #

    將视圖子類化並覆盖 func intrinsicContentSize() -> CGSize .只需返迴 CGSizeZero 如果视圖是隱藏的。

  • macos:錯誤:"酿造鏈接"步骤未成功完成
  • PostgreSQL:如何进行"不區分大小寫"查詢