我需要將translatesAutoresizingMaskIntoConstraints
設置爲NO
。默認情況下,它設置爲YES
(以協助大多數從struts和彈簧過渡到新Auto Layout的應用程序)。在Xcode 4.5中設置轉換自動化超大小寫限制的位置
Xcode中是否有某個地方的默認值可以從YES
更改爲NO
?
或者我必須爲每個視圖手動設置它嗎?
我需要將translatesAutoresizingMaskIntoConstraints
設置爲NO
。默認情況下,它設置爲YES
(以協助大多數從struts和彈簧過渡到新Auto Layout的應用程序)。在Xcode 4.5中設置轉換自動化超大小寫限制的位置
Xcode中是否有某個地方的默認值可以從YES
更改爲NO
?
或者我必須爲每個視圖手動設置它嗎?
這是一個很好的問題 - 我試圖找到自己的答案。可悲的是,它看起來沒有「快速修復」。目前,蘋果認爲,基於約束的佈局選擇加入 - 即使命名UIView
Class Reference的部分:
選擇啓用基於約束的佈局
但是,選擇加入是不是全球性的。我想這是因爲如果你只是把Struts變成約束,那麼並不是所有的東西都看起來不錯。某些UI元素會中斷,否則會產生大量不可滿足的約束錯誤。
我能想到的一個可能的解決方案 - 我還沒有嘗試過自己,但你可以做一個品類上UIView
,設置所有UIView
對象返回NO
爲- (BOOL)translatesAutoresizingMaskIntoConstraints
。雖然我不知道這會破壞什麼,但它會全局設置translatesAutoresizingMaskIntoConstraints
到NO
。
這裏是a good introduction to Categories if you want to learn more about them!
當你必須改變你的子視圖的大小或位置。在設置子視圖的框架之前使用(BOOL)translatesAutoresizingMaskIntoConstraints
方法。
[self.benchmarkButton removeFromSuperview];
[self.benchmarkButton setTranslatesAutoresizingMaskIntoConstraints:YES];
[self.benchmarkButton setFrame:CGRectMake(20, self.benchmarkButton.frame.origin.y+40, 260, 30)];
[self.benchmarksView addSubview:self.benchmarkButton];
這就是你的子視圖不會與約束作鬥爭,因爲它是Xcode 4.3和更高版本中的默認(AutoLayout)。謝謝
不錯,但我猜你最終可能會以這種方式進行衝突,而不是考慮使用現有的約束條件。 –
我遲到了這個問題,但提到的選項仍然缺失在Xcode 5 & 6,所以這個問題仍然是有意義的。
實際上,我們總是可以通過在Storyboard(Interface Builder)中添加一個用戶定義的運行時屬性來爲視圖/控件/對象的任何屬性設置一個值,如以下屏幕截圖所示。
它也適用於translatingAutoresizingMaskIntoConstraints。所以這個問題可以解決。
這是一個很流暢的解決方案,但我相信它會導致XCode 6.3 beta 2中的「凍結」。當我刪除它時,我的視圖加載得很好..但是在它升級到beta 2後它崩潰了。 –
This任何需要更新解決方案的人都可以在XCode 9和iOS 11中正常工作。這應該是現在接受的答案。 – JasonD
根據文檔,該屬性被自動如果視圖是通過界面生成器添加設置爲NO
。
好地方。請注意,UICollectionViewCell contentViews是一個例外。 –
如何使用類別來設置所有的UIView對象返回沒有?類別方法只適用於一個實例。 – Boon
這個答案已被接受,但它的工作?我希望這種方法有問題。 –
類別方法破壞原始方法@Boon,並且每個實例使用新的實現。 [除非原始方法本身在類別中實現](http://stackoverflow.com/a/7013922/603977)。 –