UISegmentedcontrolの高さを変更しようとしていますが、InterfaceBuilderでは許可されていません。変更する方法はありますか、それとも不可能ですか?
ありがとう
UISegmentedcontrolの高さを変更しようとしていますが、InterfaceBuilderでは許可されていません。変更する方法はありますか、それとも不可能ですか?
ありがとう
IBに制約を追加すると、次のトリックも実行されます。
はい、コードで使用でき[mySegmentedControl setFrame:frame]
ます。IBでこれができないのは残念です。
したがって、高さを変更したいだけの場合:
CGRect frame= mySegmentedControl.frame;
[mySegmentedControl setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, fNewHeight)];
Auto Layoutを使用していて、Lukeの回答に問題がある場合、これは私にとって完全に機能しました。
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:mySegmentedControl
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:fNewHeight];
[mySegmentedControl addConstraint:constraint];
Interface Builder内でこれを行うには、コントロールを選択し、「ユーザー定義のランタイム属性」の下にフレーム属性を追加します。
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
、テキストエディットでを開きます。そこにコードがあります:
<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
。
スウィフトソリューション:
segmentedControl.frame = CGRect(x: segmentedControl.frame.origin.x, y: segmentedControl.frame.origin.y, width: segmentedControl.frame.size.width, height: 40);
SegmentedControlの高さを40に設定します。
スウィフトソリューション:
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に設定します。
MySegmentedControl.frame = CGRectMake(15,5, 290, 50);
ビューに合うように座標を変更するだけです(これはiOS 7用に更新されています)
[自動レイアウトを使用]を選択した場合、フレームのリセットは機能しません。代わりに制約を変更する必要があります。おそらく、xcode 5でデフォルトで選択されているため、ベストアンサーが誰かに機能しない理由です。
JiFangの解決策は私にはうまくいきませんでした。セグメント化されたコントロールをサブクラス化し、これらのメソッドを追加する必要がありました。自動レイアウトに基づくソリューションは、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
)
)
私にとっての解決策は:-
CGRect frame = CGRectMake (20, 20, 180, 50);
self.segmentedControl.frame = frame;
自動サイズ変更を使用しなくても、すべてのバージョンで機能します。