1

だから私はボタンの束で動作する単純な UIScrollView を取得しようとしています。次のコードを使用して、このタスクを正常に完了することができました。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [_scroller setScrollEnabled:YES];
    [_scroller setContentSize:CGSizeMake(320, 1487)];

    UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, -500, 320, 2800)];
    [imgView setBackgroundColor:[UIColor blackColor]];
    [_scroller addSubview:imgView];


    UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn1 setTitle:@"Cool title" forState:UIControlStateNormal];
    [btn1 setFrame:CGRectMake(7, 7, 150, 160)];
    [btn1 setImage:[UIImage imageNamed:@"small.png"] forState:UIControlStateNormal];
    [btn1 addTarget:self action:@selector(btn1_m) forControlEvents:UIControlEventTouchUpInside];
    [_scroller addSubview:btn1];

ただし、ボタンをプログラムで追加するのではなく、インターフェイス ビルダーを介してボタンを追加するとどうなるでしょうか。これを行うたびに、スクローラーはもはやスクロールしません!

たとえば、ボタンをコントロールドラッグした後に次のコードを使用するとします。

- (IBAction)theButton:(UIButton *)sender {
    [_scroller addSubview:sender];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [_scroller setScrollEnabled:YES];
    [_scroller setContentSize:CGSizeMake(320, 1487)];
}

...スクロールが機能しません。ボタンは表示されますが、何もスクロールしません。基本的に、インターフェイス ビルダーを使用してアプリにボタンを追加し、それらもスクロールさせたいだけですが、これを機能させることはできません!

4

1 に答える 1

0

プログラムで UI を作成すると、スクロールビューのサブビューは次のようになります。

ImageView
ボタン
ボタン
...

IB を使用してボタンを追加すると、次のようになります。

ボタン
ボタン
...
ImageView

画像ビューがスクロール ビューに追加された後に、ブレークポイントを配置します。LLDB コンソールで次のように入力します。

(lldb) po _scroller.subviews

リストの一番下に画像ビューが表示されると思います。ボタンを覆っていますが、スクロールしています。大きな黒い画像ビューであるため、見た目がよくありません。

画像ビューをサブビュー リストの最後に送信します。

[_scroller sendSubviewToBack:imgView];

その後、ボタンが再び表示されます。また、これを行った後、lldb でスクロールビューのコンテンツ サイズを確認します。

(lldb) p _scroller.contentSize

すべてが正しく見える場合は、スクロールしているはずです。

于 2013-06-04T23:41:31.243 に答える