为什么label需要sizeToFit?
Why does label need sizeToFit?
如果不调用sizeToFit
,标签是不可见的。这是为什么?
class RootViewController: UIViewController {
override func loadView() {
let v = UIView()
v.backgroundColor = .green
self.view = v
let label = UILabel()
v.addSubview(label)
label.text = "Hello, World!"
label.autoresizingMask = [
.flexibleTopMargin,
.flexibleLeftMargin,
.flexibleBottomMargin,
.flexibleRightMargin]
label.sizeToFit()
label.center = CGPoint(v.bounds.midX, v.bounds.midY)
label.frame = label.frame.integral
}
}
UIView()
等同于 UIView(frame: CGRect.zero)
。所以你的标签的默认大小是零。您正在使用手动布局,这意味着系统不会自动调整标签的大小。因此,无论您分配给它的大小是它的大小。除了调用 sizeToFit()
之外,您的代码没有在任何地方分配大小。因此,如果您不调用 sizeToFit()
,您的标签将保留您创建它时使用的零大小。 sizeToFit()
更改其大小以适合其内容,因此您可以实际看到它。
如果不调用sizeToFit
,标签是不可见的。这是为什么?
class RootViewController: UIViewController {
override func loadView() {
let v = UIView()
v.backgroundColor = .green
self.view = v
let label = UILabel()
v.addSubview(label)
label.text = "Hello, World!"
label.autoresizingMask = [
.flexibleTopMargin,
.flexibleLeftMargin,
.flexibleBottomMargin,
.flexibleRightMargin]
label.sizeToFit()
label.center = CGPoint(v.bounds.midX, v.bounds.midY)
label.frame = label.frame.integral
}
}
UIView()
等同于 UIView(frame: CGRect.zero)
。所以你的标签的默认大小是零。您正在使用手动布局,这意味着系统不会自动调整标签的大小。因此,无论您分配给它的大小是它的大小。除了调用 sizeToFit()
之外,您的代码没有在任何地方分配大小。因此,如果您不调用 sizeToFit()
,您的标签将保留您创建它时使用的零大小。 sizeToFit()
更改其大小以适合其内容,因此您可以实际看到它。