我使用的是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