2

にサブビューを追加していUIScrollViewます。この質問のために、私は追加されたビューを単純化しています:testViewそれはUIButton

私のスクロールビューはうまく機能していますが、ボタンのタッチがうまく機能していません

  • 最初のボタンをクリックできますが、最初のピクセルは(約)100個だけです。
  • スクロールは非常にうまく機能しています。
  • 最初のボタンの終わりをクリックできません
  • 他のボタンはクリックできません

これが私のコードです:

__block CGFloat scrollViewContentSize = 0;
__block CGFloat buttonRectOrigineY = 0;

[self.itemsToDisplay enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

    CGRect frameTest = CGRectMake(0, buttonRectOrigineY/2, 320, 200);
    UIButton *testButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    testButton.frame = frameTest;
    UIView *testView = [[UIView alloc] initWithFrame:frameTest];
    [testView addSubview:testButton];
    [self.articleScrollView addSubview:testView];
    buttonRectOrigineY      += 200;
    scrollViewContentSize   += 200;
}];
[self.articleScrollView setContentSize:CGSizeMake(320, scrollViewContentSize)];

これが私の問題をよく理解するための画像です: ボタンが触れられないuiscrollview

4

2 に答える 2

0

ボタンとビューのフレームを間違えていました。誰にでも役立つ場合は、ここに実用的なコードがあります。

__block CGFloat scrollViewContentSize = 0;
__block CGFloat buttonRectOrigineY = 0;

[self.itemsToDisplay enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

    CGRect frameTestButton = CGRectMake(0, 0, 300, 150);
    CGRect frameTestView = CGRectMake(10, buttonRectOrigineY, 300, 200);
    UIButton *testButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    testButton.frame = frameTestButton;
    testButton.backgroundColor = [UIColor greenColor];
    UIView *testView = [[UIView alloc] initWithFrame:frameTestView];
    if(idx == 0)
        testView.backgroundColor = [UIColor yellowColor];
    if(idx == 1)
        testView.backgroundColor = [UIColor orangeColor];
    if(idx == 2)
        testView.backgroundColor = [UIColor redColor];
    if(idx == 3)
        testView.backgroundColor = [UIColor magentaColor];
    if(idx == 4)
        testView.backgroundColor = [UIColor purpleColor];
    if(idx <= 4){
        LogDebug(@"idx : %lu", (unsigned long)idx);
        [testView addSubview:testButton];
        [self.articleScrollView addSubview:testView];
        [self.articleScrollView bringSubviewToFront:testView];
        buttonRectOrigineY      += 200;
        scrollViewContentSize   += 200;
    }
}];
[self.articleScrollView setContentSize:CGSizeMake(320, scrollViewContentSize)];
于 2013-03-14T17:58:28.727 に答える
0

bringSubviewToFront問題を回避するために使用できます

CGRect frameTest = CGRectMake(0, buttonRectOrigineY/2, 320, 200);
UIButton *testButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
testButton.frame = frameTest;
UIView *testView = [[UIView alloc] initWithFrame:frameTest];
[testView addSubview:testButton];
[testView bringSubviewToFront:testButton];
[self.articleScrollView addSubview:testView];
[self.articleScrollView bringSubviewToFront:testView];

再び問題が発生した場合は、ボタンの周りにボーダーを適用し、手動で表示されるボタン領域を確認してください。

于 2013-03-13T19:43:04.413 に答える