如何更改UISegmentedControl的高度?

3

我在UITableView中使用一个UISegmentedControl,如下所示:

最初的回答:

UITableView中使用UISegmentedControl的方法如下:

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

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

原始答案:Original Answer

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中使用时呈现出预期效果吗?最初的回答:该控件不支持修改高度,但是可以通过改变字体大小来控制高度。你可以尝试使用方法来更改字体大小,以达到所需的高度。

有一些类,比如UISwitch,它们会强制指定尺寸。分段控件可能是其中之一,你最好重新创建一个以适应你的设计。 - undefined
UISegmentedControl不喜欢手动调整大小,它的高度是无法控制的。最好使用替代方案,例如MultiSelectSegmentedControl 或者 BetterSegmentedControl - undefined
3个回答

3

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

和这个问题一样: iOS: 更改UISegmentedcontrol的高度

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

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

0
只需将frame设置为tableView.tableHeaderView即可,不需要使用约束。
tableView.tableHeaderView?.frame.size.height = 50

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接