2015-03-13 44 views
8

NSLayoutConstraint(在iOS 8.0)有一個BOOL屬性,稱爲active,它可以很容易地禁用/啓用所述佈局約束。在InterfaceBuilder中啓用/禁用NSLayoutConstraints

要爲視圖控制器創建第二個佈局集,然後以編程方式啓用/禁用(通過兩個集合的,NSLayoutConstraints),我需要在界面構建器中禁用已定義的佈局約束。

讓我在這裏明確我不想刪除它們,只是禁用它們,這樣我就可以設計第二套沒有界面生成器抱怨所有關於不匹配約束的時間。 此外,切換大小類別不是一種選擇,因爲佈局集合適用於同一個大小類別。

有沒有這樣做的選擇?

由於提前

馬爾特

更多信息:SDK Version: 8.1Deployment Target 8.0

回答

18

選擇要在故事板禁用約束和選項 + 命令 + 顯示屬性Inspector,然後取消選擇Installed。

+8

哇謝謝,工作,我真的雖然取消選中安裝將使他們無法訪問在這個尺寸的類!非常感謝! – Malte 2015-03-13 08:59:13

+0

在Xcode 8中,你必須選中「Use trait variation」選項才能啓用它。 – 2017-05-04 11:05:13

+0

@AmmarMujeeb你在哪裏做的? – shim 2017-06-13 20:06:47

10

我以前使用過Gabbler提供的解決方案,但最近我使用Swift 2.0和Xcode 7嘗試了同樣的事情,發現它不再有效。正如人們所預料的那樣,設置爲未安裝的約束根本未安裝,並且在打開或關閉時對佈局沒有影響。

我對該問題的解決方案是確保所有約束都已安裝,並添加用戶定義的運行時屬性,其中鍵爲'active',類型'boolean'和值'false'。

用戶定義的運行時屬性面板可以在Custom Inspector字段下的Identity Inspector中找到。

+0

很好的解決方法。但是,仍然會遇到與衝突約束關聯的所有Interface Builder警告和錯誤。我想知道爲什麼沒有提供用於解決這種事情的活動屬性的複選框。 – bjornorri 2015-11-11 18:12:38

+1

是的,這不是特別令人愉快,但我不知道完全符合IB標準的修復程序。希望未來的Xcode版本能夠認識到這種設置的必要性。 – Ash 2015-11-13 11:30:47

+1

您始終可以將標記爲未激活的約束的優先級設置爲9999以使警告消失。 – bencallis 2016-04-10 19:14:36

0

使用Xcode中8和斯威夫特3沒有得到任何警告,被取消選中在Interface Builder中安裝中,檢查標籤我的解決辦法:

Installed box on Interface builder

然後創建IBOutlets並添加/編程上刪除viewDidLayoutSubviews()

view.removeConstraints([constraints to remove, ...]) 
view.addConstraints([constraints to add, ...]) 

確保先刪除約束,否則你會得到消息日誌無法同時滿足約束...