iOS:更改UISegmentedcontrol的高度

我试图改变UISegmentedcontrol的高度,但是在Interface Builder中是不允许的。 有什么方法可以改变或者不可能?

谢谢

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

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

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

在IB中添加一个约束也可以做到这一点:

IB中的约束

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

在这里输入图像说明

如果你正在使用自动布局,并且遇到卢克的答案 ,这对我来说是完美的:

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

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

在IB中添加框架属性

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

在这里输入图像说明

Swift 3 IBInspectable解决scheme:

 @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 } } } 

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

你也可以通过xib来完成。 只要将一个段控件添加到xib 。 然后在TextEdit中打开xib 。 在那里你会find代码:

 <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

Swift解决scheme:

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

将SegmentedControl的高度设置为40。

只要做MySegmentedControl.frame = CGRectMake(15,5, 290, 50); 只需更改坐标以适合您的视图(iOS 7已更新)

对我来说,解决办法是:

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

它适用于每个版本,甚至没有使用自动调节。

吉芳的解决scheme并不适合我。 我不得不inheritance分割的控件并添加这些方法。 基于自动布局的解决scheme在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); } 

你可以试试以下内容:

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

如果select“使用自动布局”,则重置框不起作用,您应该改变约束。 也许这就是为什么最好的答案不适用于某人的原因,因为它在xcode 5中被默认选中

Swift解决scheme:

 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。