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中添加一个约束也可以做到这一点:
添加一个新的高度约束并设置其值。
如果你正在使用自动布局,并且遇到卢克的答案 ,这对我来说是完美的:
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:mySegmentedControl attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:fNewHeight]; [mySegmentedControl addConstraint:constraint];
要在Interface Builder中执行此操作,您可以在“用户定义的运行属性”下select控件并添加框架属性
最好和简单的方法是设置分段控制的高度约束,并根据需要增加其值。
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。