iOS:更改UISegmentedcontrol的高度

时间:2012-08-19 15:17:59

标签: ios uisegmentedcontrol

我正在尝试更改UISegmentedcontrol的高度,但在Interface Builder中不允许这样做。有没有办法改变或者不可能?

由于

16 个答案:

答案 0 :(得分:143)

在IB中添加约束也可以解决问题:

Constraint in IB

答案 1 :(得分:83)

是的,您可以在代码中使用[mySegmentedControl setFrame:frame]。不幸的是,你不能在IB中做到这一点。

所以,如果你只想改变身高:

CGRect frame= mySegmentedControl.frame;
[mySegmentedControl setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, fNewHeight)];

答案 2 :(得分:24)

添加新的高度约束并设置其值。

enter image description here

答案 3 :(得分:12)

如果您使用自动布局并且遇到Luke's answer问题,这对我来说非常有用:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:mySegmentedControl
                                     attribute:NSLayoutAttributeHeight 
                                     relatedBy:NSLayoutRelationEqual
                                     toItem:nil
                                     attribute:NSLayoutAttributeNotAnAttribute
                                     multiplier:1 
                                     constant:fNewHeight];
[mySegmentedControl addConstraint:constraint];

答案 4 :(得分:10)

要在Interface Builder中执行此操作,您可以选择控件并在"用户定义的运行时属性"

下添加框架属性

add frame attribute inside IB

答案 5 :(得分:8)

最好和最简单的方法是将高度约束设置为分段控制,并根据需要增加其值。

enter image description here

答案 6 :(得分:7)

Swift 3 IBInspectable Solution:

@IBDesignable class MySegmentedControl: UISegmentedControl {

    @IBInspectable var height: CGFloat = 29 {
        didSet {
            let centerSave = center
            frame = CGRect(x: frame.minX, y: frame.minY, width: frame.width, height: height)
            center = centerSave
        }
    }
}

答案 7 :(得分:4)

幸运的是,你可以改变xib的高度

您也可以通过xib完成此操作。只需将段控件添加到xib即可。然后在TextEdit中打开xib。在那里你会找到代码:

<segmentedControl opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="B99-Tt-vJG">

<rect key="frame" x="222" y="82" width="123" height="44"/>

在这里,您可以将高度从44更改为任何所需高度。您可以像这样更改任何UIConponent的高度。即使是UIPickerView

答案 8 :(得分:3)

只需转到id UisegmentContrrole所在的故事板,然后将高度约束设置为您的自定义高度作为

enter image description here

答案 9 :(得分:2)

Swift Solution:

segmentedControl.frame = CGRect(x: segmentedControl.frame.origin.x, y: segmentedControl.frame.origin.y, width: segmentedControl.frame.size.width, height: 40);

将SegmentedControl的高度设置为40。

答案 10 :(得分:1)

Swift Solution:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    let rect = CGRect(origin: segment.frame.origin, size: CGSize(width: segment.frame.size.width, height: 100))
    segment.frame = rect
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    let rect = CGRect(origin: segment.frame.origin, size: CGSize(width: segment.frame.size.width, height: 100))
    segment.frame = rect
}

    override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    let rect = CGRect(origin: segment.frame.origin, size: CGSize(width: segment.frame.size.width, height: 100))
    segment.frame = rect
}

将SegmentedControl的高度设置为100.

答案 11 :(得分:0)

只需执行MySegmentedControl.frame = CGRectMake(15,5, 290, 50);,只需更改坐标即可适合您的视图  (这是针对iOS 7更新的)

答案 12 :(得分:0)

对我而言,解决方案是: -

CGRect frame = CGRectMake (20, 20, 180, 50);
self.segmentedControl.frame = frame;

它适用于每个版本,甚至不使用自动调整。

答案 13 :(得分:0)

如果您选择&#34;使用自动布局&#34; ,重置帧不起作用,你应该改变约束。也许这就是为什么最好的答案对某人不起作用的原因,因为它在xcode 5中默认选择

答案 14 :(得分:0)

Ji Fang的解决方案对我不起作用。我不得不对分段控件进行子类化并添加这些方法。基于自动布局的解决方案在iOS7.0 /7.1中并不健全。有时它会跳回到默认高度。

const static CGFloat kViewHeight = 35;

- (void) layoutSubviews {

    [super layoutSubviews];

    CGRect frame = self.frame;
    [self setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, kViewHeight)];

}

- (CGSize) intrinsicContentSize {

    CGSize defaultSize = [super intrinsicContentSize];
    return CGSizeMake(defaultSize.width, kViewHeight);
}

答案 15 :(得分:0)

您可以尝试以下方法:

segmentedControll.addConstraint(
        NSLayoutConstraint(
            item: segmentedControll,
            attribute: NSLayoutAttribute.Height,
            relatedBy: NSLayoutRelation.Equal,
            toItem: nil,
            attribute: NSLayoutAttribute.NotAnAttribute,
            multiplier: 1,
            constant: 40.0
        )
    )