3

UISegmentedControlこのコードを使用して高さを変更しようとしています:

CGRect frame= mySegmentedControl.frame;
[mySegmentedControl setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, fNewHeight)];

しかし、うまくいきません。誰かが理由を考えていますか?インターフェイスビルダーでセグメント化されたコントロールの「自動レイアウトを使用」機能のチェックを外すと、実際には機能しますが、セグメント化されたコントロールの項目は何らかの理由でクリックできなくなります...

これは、複数行のテキストを に追加する簡単な方法がまだ見つからないという問題の次の問題ですUISegmentedControl(ここでのヘルプも大歓迎です)。

4

5 に答える 5

8

ビューサイクルについてのようです。

iOS で実際に 3 つの要素に関係するビューをレイアウトする 1. autolayout (iOS6 以降で使用可能) 2. setFrame 3. autoreiszing マスク

あなたの場合、

autolayout は、その UIView に必要なフレームを (NSLayouConstraints に基づいて) 計算し、レイアウトするのに役立ちます。

そのため、インターフェイス ビルダーで「autolayout」を有効にすると、インターフェイス ビルダーはその UIView の NsLayoutConstraints を生成します。"autolayout" を無効にすると、ビルダーは UIView のフレームを生成します。

自動レイアウトを使用する必要があると仮定すると、正しいタイミングで UISegmentedControl のサイズを変更する必要があります

- (void)viewDidLayoutSubview

ビューのライフサイクルについてです。単純化すると、次のようになります。

updateConstraints -> レイアウト (詳細については、関連する WWDC セッション ビデオを参照してください)

このフローのため、フレームを変更することはできません:

コードで新しいフレームを設定 -> ハンドルの制約と計算を表示 (UISegmentedControl の別のフレームを生成) -> レイアウトを実行

このよく整理されていない回答で申し訳ありません。

于 2012-12-19T08:02:54.483 に答える
4

おそらくこれが役立つでしょう: Storyboard ビュー内にカスタムサイズの UISegmentedControl がありました。ストーリーボード ビューは AutoLayout を利用しており、セグメントの 1 つを押すたびに、UISegmentedControl はカスタム フレーム サイズではなく、デフォルトの高さにサイズ変更されます。

私の解決策:

1) -(void)viewDidLoad で UISegmentedControl フレームを設定します。

[mySegControl setFrame:CGRectMake(100, 170, 568, 100)];

2) フレームを -(void)viewDidLayoutSubviews に設定します。

[mySegControl setFrame:CGRectMake(100, 170, 568, 100)];

3) セグメントが選択されたときのターゲットとして使用するメソッドで、setNeedsLayout を呼び出します。これにより、UISegmentedControl が強制的に再レイアウトされ、カスタム フレーム サイズが変更されます。

[self.view setNeedsLayout];
于 2013-03-19T15:57:34.547 に答える
3

私はこれを使用して mySegmentedControl.frame=CGRectMake(236, 178, 171, 35);いますが、魅力的です。

フレーム値を確認しましたか?

于 2012-12-19T08:05:03.457 に答える
2

幸いなことに、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

于 2014-03-12T06:36:00.770 に答える