0

このアプリをiOS 4以降に展開しようとしているため、自動レイアウトを使用するのではなく、プログラムでUIViewのレイアウトを変更しようとしています。基本的に、画面の高さを 455 (iPhone 5) にしてビューを設定します (実際の画面サイズは 568 ポイントですが、下部にタブ バーがあるので、IB に表示されているサイズはそれを考慮に入れていると想定しています) )。すべてのボタンとラベルの起源を長い画面サイズと比較して記録し、プログラムで好みの方法に変更しました。問題は、ボタンとラベルの一部が画面からはみ出していることです。そのため、それらを境界内に保つために何らかの変換を実行する必要があると思いますが、何がわからないのですか。以下に添付されている写真を参照してください。

ボタンとラベルの起点を変更するために initMethod が呼び出される前の 画像 起点を変更するために initMethod が呼び出された後の画像 古い画面サイズの XCode でのビュー プロパティ これがビューの外観です。ボタンを動かして、それぞれの由来を記録しました。 ここに画像の説明を入力 viewWillAppear の私の init メソッドの写真。ラベルのフレームがゼロになっていることに注意してください。 ここに画像の説明を入力 使用したコードは次のとおりです。

-(void)initView
{
    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    if (screenBounds.size.height == 480) {
        //iphone 4,4s
        //done
    }else if(screenBounds.size.height == 568) {
        //iphone 5
        CGRect frame;
        //Static Professor label
        frame = [staticProfessorLabel frame];
        frame.origin.x = 48;
        frame.origin.y = 218;
        [staticProfessorLabel setFrame:frame];
        //Professor Label
        frame = [professorLabel frame];
        frame.origin.x = 192;
        frame.origin.y = 218;
        [professorLabel setFrame:frame];
        //show button
        frame = [showProfessorButton frame];
        frame.origin.x = 67;
        frame.origin.y = 258;
        [showProfessorButton setFrame:frame];
        //clear proff button
        frame = [clearProfessor frame];
        frame.origin.x = 240;
        frame.origin.y = 258;
        //note label
        frame = [bottomNote frame];
        frame.origin.x = 160;
        frame.origin.y = 310;
        [bottomNote setFrame:frame];
        //search button
        frame = [searchButton frame];
        frame.origin.x = 158;
        frame.origin.y = 424;
        [searchButton setFrame:frame];
        //spinner
        frame = [actIndicator frame];
        frame.origin.x = 266;
        frame.origin.y = 424;
        [actIndicator setFrame:frame];
    }
}

また、viewDidLoadで呼び出すと、ボタンとラベルのいずれも有効なフレームを提供しないため、viewDidAppearメソッドでこれを呼び出しています(まだ初期化されていないと思います)。

4

2 に答える 2

2

Xcode のスクリーンショットは、ストーリーボードに制約が含まれていることを示しているため、ストーリーボードに自動レイアウトがオンになっていることがわかります。ビュー フレームをコードで直接設定する場合は、自動レイアウトをオフにする必要があります。

ストーリーボードで自動レイアウトをオフにするのに助けが必要な場合は、こちらの回答をご覧ください。

于 2012-11-06T07:12:40.857 に答える
1

ハードコーディングされた座標は単に間違っています。値を再確認してください。

たとえば、は 160bottomNoteから始まりますがx、これは明らかに右すぎます。

于 2012-11-06T06:00:15.260 に答える