我使用的是Swift
,我發現自己必須繼承UIKit
子類,如UIView
和UIButton
。我不在乎設置框架,因爲我使用的是AutoLayout
,所以我不想/不需要使用init(frame: CGRect)
。UIKit類繼承的最佳實踐
class customSubclass: UIView {
var logo: UIImage
init(logo: UIImage) {
self.logo = logo
//compiler yells at me since super.init() isn't called before return from initializer
//so I end up doing this
super.init(frame: CGRectZero)
self.translatesAutoresizingMaskIntoConstraints = false
}
我也並不覺得很性感來設置它的框架CGRectZero
。
有沒有一種方法來爲UIView或UIButton的子類自定義初始值設定項,而無需明確設置它的框架?
注意每個子類都在代碼中實例化,所以required init(coder: aDecoder)
在我的代碼中,但實際上並沒有做任何事情。
謝謝!
海事組織最好不要讓視圖本身設置爲知道你要用自動佈局調整大小。它應該根據您在初始化程序中傳遞的內容將其框架初始化爲合理的值。在你的例子中,可能起源爲0,0,大小等於logo.size。 – dan
@dan如果我無視這個問題,我會通過傳遞一個有效的框架來獲得什麼?我可以做的另一件事是創建一個'init'函數,該函數接受'frame'以及其他需要的參數,我需要像'init(frame:CGRect,logo:UIImage)' '但是我不得不在視圖控制器中定義框架 –
您的視圖不應該知道您將忽略框架。它應該建立起來,這樣它就會有一個合理的框架,即使它創造了它也不會給它一個新的框架。 – dan