如何更改UISegmentedControl的高度?

时间:2019-09-03 12:51:30

标签: ios swift uitableview uisegmentedcontrol

我正在UISegmentedControl中使用UITableView,如下所示-

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中使用时像预期的那样?

3 个答案:

答案 0 :(得分:2)

通过设置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
}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

与以下问题相同: iOS: change the height of UISegmentedcontrol

b.t.w您还可以通过更改视图变换来更改比例。

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