当我创建UISegmentedControl
并将其设置为表格视图的标题视图而不为其指定任何框架时,控件会自动调整大小以跨越表格视图的宽度并保持其固有高度。
let control = UISegmentedControl(items: ["one", "two"])
tableView.tableHeaderView = control
但是,当我将分段控件包装在另一个UIView
中时,视图会折叠并且未正确调整大小。
let header = UIView()
let control = UISegmentedControl(items: ["one", "two"])
header.addSubview(control)
tableView.tableHeaderView = header
如何使UIView
的行为方式与UISegmentedControl
相同?在初始配置方面,我无法找到两者之间的任何差异。
答案 0 :(得分:4)
在这里回答自己。我发现用一个任意宽度和所需高度的帧初始化视图,然后使用autolayout使分段控件跨越视图就行了。
let header = UIView(frame: CGRectMake(0, 0, 1, 33))
let control = UISegmentedControl(items: ["one", "two"])
control.translatesAutoresizingMaskIntoConstraints = false
header.addSubview(control)
header.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[control]|", options: [], metrics: nil, views: ["control": control]))
header.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[control]|", options: [], metrics: nil, views: ["control": control]))
tableView.tableHeaderView = header
似乎忽略了框架的宽度,并且标题视图始终调整为表格视图的宽度。但是,必须设置专用高度。
我猜是
UISegmentedControl(items: ["one", "two"])
使用默认框架在内部调用init(frame:)
,启用此机制。另一方面,
UIView()
显然使用init(frame:)
调用CGRectZero
,这会使标题崩溃。