簡體   English   中英

無法設置translatesAutoresizingMaskIntoConstraints

[英]Can't set translatesAutoresizingMaskIntoConstraints

為了解決與以編程方式向滾動視圖添加子視圖相關的自動布局問題,我遇到了遍及Internet的許多引用,在各種情況下,都說要根據情況設置translatesAutoresizingMaskIntoConstraints = YEStranslatesAutoresizingMaskIntoConstraints = 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.

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