如何在不使用自动布局的情况下设置 UISegmentedControl 子类的高度?

How to set the height of UISegmentedControl subclass without using auto layout?

我创建了一个 UISegmentedControl 子类,我想将其用作 UITableView.

的部分 header 视图

我希望自定义 UISegmentedControl 子类的高度为 50pt。

我知道我可以为此创建一个高度限制。但是,在设置高度约束后,如果此分段控件用作 table 视图的 header 部分,则会显示自动布局错误(请参阅 question)。

我尝试通过调用具有适当高度的 init(frame:) 方法来设置高度,但这没有效果。

有没有办法在不使用自动布局的情况下设置 UISegmentedControl 子类的高度?

您可以简单地使用framessectionHeaderView中设置UISegmentedControlsizeposition,即

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let view = UIView()
    let segmentedControl = UISegmentedControl(frame: CGRect(x: 10, y: 10, width: 200, height: 50))
    segmentedControl.insertSegment(withTitle: "First", at: 0, animated: false)
    segmentedControl.insertSegment(withTitle: "Second", at: 1, animated: false)
    segmentedControl.selectedSegmentIndex = 0
    view.addSubview(segmentedControl)
    return view
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 70
}

截图: