iOS:更改UISegmentedcontrol的高度

Dav*_*dNg 66 uisegmentedcontrol ios

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

谢谢

Ji *_*ang 146

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

IB中的约束


Luk*_*uke 83

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

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

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

  • 只要你在viewDidLayoutSubviews(或者,可能是后来的)中执行它,而不是在viewDidLoad中,在IOS7中工作正常. (8认同)
  • 不适用于iOS 7.1 - 我已经在boath viewDidLayoutSubviews和viewDidLoad中尝试过了 (3认同)

nav*_*148 25

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

在此输入图像描述


jbu*_*s20 12

如果您使用自动布局并且无法解决Luke的问题,那么这对我来说非常有用:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:mySegmentedControl
                                     attribute:NSLayoutAttributeHeight 
                                     relatedBy:NSLayoutRelationEqual
                                     toItem:nil
                                     attribute:NSLayoutAttributeNotAnAttribute
                                     multiplier:1 
                                     constant:fNewHeight];
[mySegmentedControl addConstraint:constraint];
Run Code Online (Sandbox Code Playgroud)


小智 10

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

在IB中添加帧属性


Ars*_*aik 9

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

在此输入图像描述


Kew*_*ier 7

Swift 3 IBInspectable解决方案:

@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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Rah*_*ade 5

只要到故事板其中id UisegmentContrrole位于并设置高度约束与自定义的高度

在此处输入图片说明