67

UISegmentedcontrolの高さを変更しようとしていますが、InterfaceBuilderでは許可されていません。変更する方法はありますか、それとも不可能ですか?

ありがとう

4

16 に答える 16

148

IBに制約を追加すると、次のトリックも実行されます。

IBの制約

于 2013-07-11T20:19:49.883 に答える
83

はい、コードで使用でき[mySegmentedControl setFrame:frame]ます。IBでこれができないのは残念です。

したがって、高さを変更したいだけの場合:

CGRect frame= mySegmentedControl.frame;
[mySegmentedControl setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, fNewHeight)];
于 2012-08-19T15:51:07.497 に答える
26

新しい高さ制約を追加し、その値を設定します。

ここに画像の説明を入力してください

于 2015-10-27T16:47:52.180 に答える
12

Auto Layoutを使用していて、Lukeの回答に問題がある場合、これは私にとって完全に機能しました。

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:mySegmentedControl
                                     attribute:NSLayoutAttributeHeight 
                                     relatedBy:NSLayoutRelationEqual
                                     toItem:nil
                                     attribute:NSLayoutAttributeNotAnAttribute
                                     multiplier:1 
                                     constant:fNewHeight];
[mySegmentedControl addConstraint:constraint];
于 2013-07-10T06:53:37.927 に答える
10

Interface Builder内でこれを行うには、コントロールを選択し、「ユーザー定義のランタイム属性」の下にフレーム属性を追加します。

IB内にフレーム属性を追加

于 2014-08-30T21:32:48.890 に答える
9

最善かつ簡単な方法は、高さ制約をセグメント化されたコントロールに設定し、必要に応じてその値を増やすことです。

ここに画像の説明を入力してください

于 2016-12-06T07:20:05.833 に答える
7

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
        }
    }
}
于 2017-01-27T07:52:14.790 に答える
5

id UisegmentContrroleが配置されているストーリーボードに移動し、カスタムの高さ高さの制約を次のように設定します。

ここに画像の説明を入力してください

于 2018-08-28T07:45:26.203 に答える
4

幸いなことに、から高さを変更することもでき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

于 2014-03-12T06:34:21.227 に答える
4

スウィフトソリューション:

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

SegmentedControlの高さを40に設定します。

于 2015-03-05T20:28:24.513 に答える
2

スウィフトソリューション:

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に設定します。

于 2016-06-09T04:41:28.547 に答える
0

MySegmentedControl.frame = CGRectMake(15,5, 290, 50);ビューに合うように座標を変更するだけです(これはiOS 7用に更新されています)

于 2013-12-11T02:04:41.940 に答える
0

[自動レイアウトを使用]を選択した場合、フレームのリセットは機能しません。代わりに制約を変更する必要があります。おそらく、xcode 5でデフォルトで選択されているため、ベストアンサーが誰かに機能しない理由です。

于 2014-09-16T11:59:35.133 に答える
0

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);
}
于 2014-11-20T14:33:29.190 に答える
0

次のことを試すことができます。

segmentedControll.addConstraint(
        NSLayoutConstraint(
            item: segmentedControll,
            attribute: NSLayoutAttribute.Height,
            relatedBy: NSLayoutRelation.Equal,
            toItem: nil,
            attribute: NSLayoutAttribute.NotAnAttribute,
            multiplier: 1,
            constant: 40.0
        )
    )
于 2015-03-26T03:54:16.990 に答える
-1

私にとっての解決策は:-

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

自動サイズ変更を使用しなくても、すべてのバージョンで機能します。

于 2014-03-10T17:24:06.040 に答える