3

現在iOS6.0を使用しています。

UIView私には、特定のサイズが必要な習慣があります。プログラムでビューを初期化して追加すれば問題ありません。ただし、ストーリーボードでビューのサイズを設定できる場所が見つかりません。

ストーリーボードは空であると判断し、サイズをゼロに設定するため、ストーリーボードでのサイズの設定は機能しません。viewDidLoad後でサイズが によって上書きされるため、サイズをまたはに設定してもviewDidAppear機能しません_applyISEngineLayoutValue

4

3 に答える 3

1

これは、Interface Builder で行うことができます。ビューがあるストーリーボードを開き、ユーティリティ メニューを開きます。

ここに画像の説明を入力

次に、ユーティリティ メニューの上部にあるルーラーのようなボタンを選択できます。

ここに画像の説明を入力

そのメニューでは、ビューのサイズと展開方法を設定できます。

また、クラス インスペクタでクラスのビューを設定したことを確認してください。

ここに画像の説明を入力

このサイトの画像トークン。

initWithFrame最後に、メソッドとinitWithCoderメソッドをオーバーライドしてください。

- (id)initWithFrame:(CGRect)frame {
    return [super initWithFrame:frame];
}

//Needs to be overrided when you set your size in interface builder
- (id)initWithCoder:(NSCoder *)aDecoder {
    return [self initWithFrame:[self frame]];
}
于 2012-10-06T10:51:59.720 に答える
1

私は同じ問題に直面していますが、短い答えは次のとおりだと思います。ストーリーボードを使用する場合、ビューの init メソッドでフレームまたは境界に依存することはできません。

ビューがセグエによって初期化されると、他の init メソッドではなく initWithCoder: メソッドが呼び出されます。これは、.xib ファイルからビュー オブジェクトを逆シリアル化しているためです。ストーリーボードの前は、initWithCoder: が呼び出されるまでにフレームと境界が設定されていましたが、ストーリーボードの場合はそうではないようです。iOS コードはこれらの値を後で設定します。

状況に応じて、いくつかの回避策を使用しました。

  1. ビューのサイズが事前にわかっている場合 (たとえば、1 つのサイズのみをサポートする特殊なビュー)、initWithCoder: メソッドで独自のフレームを設定します。

  2. ビューのサイズがわからない場合は、ビューの layoutSubviews メソッドが呼び出されるまで、サイズ固有のものの初期化を延期します。

  3. より便利な場合は、ビューの ViewController でサイズ固有の初期化を明示的に行うことがあります。(きれいではありませんが、時には素早く簡単にできます。私は誇りに思っていません。)

于 2013-04-09T02:05:25.470 に答える