我正在尝试更改UISegmentedcontrol的高度,但在Interface Builder中不允许这样做。有没有办法改变或者不可能?
由于
答案 0 :(得分:143)
在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)
答案 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中执行此操作,您可以选择控件并在"用户定义的运行时属性"
下添加框架属性
答案 5 :(得分:8)
答案 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)
答案 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
)
)