我正在尝试更改UISegmentedcontrol的高度,但是在界面生成器中不允许这样做。有什么办法可以改变还是不可能?
谢谢
Answers:
是的,您可以[mySegmentedControl setFrame:frame]
在代码中使用。不幸的是,您无法在IB中做到这一点。
因此,如果您只想更改高度:
CGRect frame= mySegmentedControl.frame;
[mySegmentedControl setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, fNewHeight)];
在IB中添加约束也可以达到目的:
如果您使用的是“自动版式”,并且在Luke的答案上遇到了麻烦,那么这对我来说非常合适:
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:mySegmentedControl
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:fNewHeight];
[mySegmentedControl addConstraint:constraint];
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
}
}
}
幸运的是,你可以从改变高度xib
和。
您也可以通过这样做xib
。只需将细分控件添加到中即可xib
。然后xib
在TextEdit中打开。在那里,您将找到代码:
<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
。
快速解决方案:
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。
纪芳的解决方案对我不起作用。我必须对分段控件进行子类化并添加这些方法。基于自动布局的解决方案在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
)
)