[英]Can't set translatesAutoresizingMaskIntoConstraints
為了解決與以編程方式向滾動視圖添加子視圖相關的自動布局問題,我遇到了遍及Internet的許多引用,在各種情況下,都說要根據情況設置translatesAutoresizingMaskIntoConstraints = YES
或translatesAutoresizingMaskIntoConstraints = NO
。
但是,在Swift中,當我鍵入:
var view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
我收到內聯錯誤: Cannot assign to 'translatesAutoresizingMaskIntoConstraints' in 'view'
。 為什么? 因為,當檢查時,您會發現它是無參數函數,而不是屬性。
我已經通過子類化解決了這個問題,但是必須將我正在處理的每個視圖都子類化,這是一個很大的不便,只是設置了translatesAutoresizingMaskIntoConstraints
:
class CardView: UIView {
override func translatesAutoresizingMaskIntoConstraints() -> Bool {
return false
}
}
有誰知道解決這個問題的方法,還是可以闡明一般互聯網委員會告訴您的內容與您在Swift中實際可以做什么之間的差異?
translationsAutoresizingMaskIntoConstraints實際上是UIView上的方法,而不是屬性。
語法之所以有效,是因為ObjC還允許您將點符號用於調用方法(關於屬性實際上是如何自動生成getter / setter方法的討論,還有其他討論)。
使用方法而不是嘗試使用ObjC的屬性符號
view.setTranslatesAutoresizingMaskIntoConstraints(false)
請改用view.setTranslatesAutoresizingMaskIntoConstraints(false)
。
迅捷2
view.translatesAutoresizingMaskIntoConstraints = false
如果您在代碼中創建任何視圖,例如文本視圖,按鈕,標簽等,則需要注意如何向其添加自動布局約束。 原因是iOS為您創建了與新視圖的大小和位置相匹配的約束,並且如果您嘗試添加自己的約束,則這些約束將會沖突並且您的應用程序將中斷。
讓我們以uilabel為例:
let titleLabel = UILabel()
titleLabel.translatesAutoresizingMaskIntoConstraints = false
同樣在您的情況下:
let newView = UIView(frame: CGRectZero)
addSubview(newView)
newView.translatesAutoresizingMaskIntoConstraints = false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.