如何更改 UISegmentedControl 的高度?

How to change the height of the UISegmentedControl?

我在 UITableView 中使用 UISegmentedControl 如下-

let segmentedControl = UISegmentedControl(items: ["Segment1", "Segment2"])
tableView.tableHeaderView = segmentedControl

以上代码按预期工作。我想更改 UISegmentedControl 的高度。我尝试在 UISegmentedControl 上设置高度限制,如下所示-

let segmentedControl = UISegmentedControl(items: ["Segment1", "Segment2"])
segmentedControl.translatesAutoresizingMaskIntoConstraints = false
segmentedControl.heightAnchor.constraint(equalToConstant: 50).isActive = true
tableView.tableHeaderView = segmentedControl

当上述代码为运行时,UISegmentedControl的高度设置为预期的自定义高度。但是,UISegmentedControl 的前缘和后缘不会与 UITableView 的前缘和后缘对齐。

我还尝试创建一个自定义 UISegmentedControl 来指定 UISegmentedControl 的高度而不设置高度限制,如下所示-

class CustomSegmentedControl: UISegmentedControl {
    override var intrinsicContentSize: CGSize {
        return CGSize(width: super.intrinsicContentSize.width, height: 50)
    }
}

以上代码没有按预期工作。谁能指出如何设置 UISegmentedControl 的高度,以便它在 UITableView 中使用时显示为预期?

只需将 frame 设置为 tableView.tableHeaderView。不要使用约束。

tableView.tableHeaderView?.frame.size.height = 50

通过设置 segmentedControl.translatesAutoresizingMaskIntoConstraints = false 您将失去默认约束。

如果您对分段控件的外观和布局感到满意,只想更改其高度,请尝试以下方法:

// probably in
override func viewDidLoad() {
    super.viewDidLoad()

    let segmentedControl = UISegmentedControl(items: ["Segment1", "Segment2"])
    segmentedControl.frame.size.height = 50.0
    tableView.tableHeaderView = segmentedControl
}

同样的问题: iOS: change the height of UISegmentedcontrol

顺便说一句,您还可以通过更改视图转换来更改比例。

var segmentedControl = UISegmentedControl(frame: CGRect(x: 0, y: 0, width: w, height: h))
segmentedControl.transform = CGAffineTransform(scaleX: x, y: y)