UIScrollViewの下部にあるUIButtonsがタッチを受信して​​いません

StackOverflow https://stackoverflow.com/questions/1401369

  •  05-07-2019
  •  | 
  •  

質問

タブバーとナビゲーションバーを備えたiPhoneアプリを作成しています。特定の時点で、DetailsViewControllerクラスのインスタンスをNavigation Controllerスタックにプッシュして表示しています。

このコントローラーはコード内でビュー階層を作成します:コントローラーの view プロパティはUIScrollViewに設定されます。UIScrollViewには、すべてのコンテンツを保持できるサイズのプレーンなUIView(示される。このcontentViewの下部には、4つのUIButtonがあります。

(現在のシミュレーターで)アプリを実行し、ビューの下部までスクロールすると、上部の2つのボタンがタッチに反応します。 3番目のボタンは上部のタッチにのみ反応し、下部のボタンはタッチにまったく反応しません。 3番目のボタンのさまざまな部分をクリックすると、スクロールビューの下部の93ピクセルがタッチイベントをサブビューに渡していないように見えます。

93は疑わしい:タブバー(49ピクセル)とナビゲーションバー(44ピクセル)の合計の高さでもあります。ただし、ナビゲーションバーとタブバーはスクロールビューの外側にあります。なぜこれが起こっているのでしょうか?

問題のコードは次のとおりです。

- (void)loadView
{
    CGRect frame = [[UIScreen mainScreen] applicationFrame]; 
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:frame];
    scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
    scrollView.delegate = self;
    self.view = scrollView;

    UIView *contentView = [[UIView alloc] initWithFrame:scrollView.bounds];
    contentView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
    [scrollView addSubview:contentView];

    CGSize viewSize = contentView.bounds.size;
    CGSize size;
    CGFloat y = 0;

    /* Snip creating various labels and image views */

    /* Actions view creates and lays out the four buttons; its sizeThatFits:
    ** method returns the frame size to contain the buttons */

    actionsView = [[PropertyDetailActionsView alloc] initWithFrame:CGRectZero];
    actionsView.autoresizingMask = (UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth);
    actionsView.delegate = self;
    size = [actionsView sizeThatFits:viewSize];
    actionsView.frame = CGRectMake(0, y, size.width, size.height);
    [contentView addSubview:actionsView];
    y += size.height;

    [contentView setFrame:CGRectMake(0, 0, viewSize.width, y)];
    scrollView.contentSize = contentView.frame.size;

    [contentView release];
    [scrollView release];
}
役に立ちましたか?

解決

昨日Twitterで提案したように、actionsViewに設定された柔軟な下余白と関係があるかもしれません。

この提案は問題を解決しませんでしたが、正しい方向に導きました。 contentViewの柔軟な高さを削除することで、問題が修正されました。

だから誰かが同様の問題を抱えているなら、autoresizingMasksで遊んでみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top