簡體   English   中英

在超級視圖中嵌入視圖而不會丟失自動布局約束

[英]Embed Views in super view without losing autolayout constraints

在ios應用程序中,我有一個自定義的UITableViewCell,里面有很多視圖。 我正在使用自動布局並根據需要設置所有約束。

但是現在我需要有一個主視圖(在內容視圖中)並將所有其他視圖放入其中(某種父視圖)。

這是我的單元格在界面構建器中的外觀示例:

在此輸入圖像描述

它具有使用約束設置的所有視圖。

我知道有一個xcode功能可以在父視圖中嵌入選定的視圖:

在此輸入圖像描述

所以我選擇所有視圖並選擇將它們嵌入視圖中。 我得到以下內容:

在此輸入圖像描述

我的問題

盡管視圖已在superview中正確嵌入,但自動布局約束已被刪除,現在我必須重新創建它們。

有沒有辦法可以將所有視圖放在superview中並具有相同的自動布局約束,而無需重新創建它們? 謝謝

正如上面的評論所述,這種方法對我很有用:

indiestack.com/2013/12/transplanting-constraints

簡而言之,方法是:

  1. 為舊的superview提供一個restoreId,以便您可以輕松地在XML中識別它。
  2. 在文本編輯器視圖中打開您正在使用的XIB / Storyboard。
  3. 將當前存在的內容復制並粘貼到備份文件中。
  4. 使用故事板將您的內容嵌入到新的超級視圖中。 不要設置任何新約束。
  5. 為新的superview提供一個還原ID,以便您可以在XML中輕松識別它。
  6. 使用您備份的舊故事板/ XIB並排打開當前的故事板/ XIB。
  7. 通過搜索還原ID在備份的XML中查找舊容器視圖。 復制<constraints></constraints><subviews></subviews>標記內的所有內容
  8. 在當前XML中查找新容器視圖,並使用復制的內容替換其<constraints></constraints><subviews></subviews>標記的內容
  9. 進入舊XML並復制舊容器的ID。
  10. 進入新的XML,並將您從步驟9獲得的舊ID替換為您粘貼的<constraints></constraints>內的新容器的ID。
  11. 不要忘記向新容器添加與舊容器匹配的約束(在我的情況下,這會將新容器固定到超級視圖的所有邊緣)。

警告:這將打破你可能設置的限制的任何出口。 其他東西,觀點等的出口......都沒問題。

  • 選擇所有視圖
  • 轉到編輯器 - >嵌入 - >視圖
  • 再次選擇所有視圖
  • 添加新約束,pin top,bottom,leading,trailing為0

在此輸入圖像描述

您是否嘗試過創建容器視圖的約束? 您不需要重新創建所有約束。

它們看起來不正確,因為它們失去了父母的限制。

在xib的頂層創建一個新視圖。 然后將現有視圖拖入其中。 現有的限制仍然存在。 您只需為嵌入設置新的約束。

暫無
暫無

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

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