UIScrollView 底部的 UIButtons 没有收到触摸

Posted

技术标签:

【中文标题】UIScrollView 底部的 UIButtons 没有收到触摸【英文标题】:UIButtons at the bottom of a UIScrollView are not receiving touches 【发布时间】:2009-09-09 18:43:15 【问题描述】:

我正在编写一个带有标签栏和导航栏的 iPhone 应用程序。在某个时刻,我将 DetailsViewController 类的一个实例推送到导航控制器堆栈上以显示它。

此控制器在代码中创建其视图层次结构:控制器的view 属性设置为 UIScrollView,其中包含一个普通的 UIView(我们称之为“contentView”),其大小可容纳所有要显示的内容。在这个 contentView 的底部,我有四个 UIButton。

现在,当我运行应用程序(目前在模拟器中)并滚动到视图底部时,顶部的两个按钮会响应触摸;第三个按钮仅在其顶部响应触摸,而下部按钮根本不响应触摸。通过单击第三个按钮的各个部分,滚动视图的下部 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];

【问题讨论】:

我也认为数字 93 很可疑,实际上是通过谷歌搜索“uiview frame height 93 pixel”找到了这个问题。感谢您的解决方案! 【参考方案1】:

正如我昨天在 Twitter 上建议的那样,这可能与为 actionsView 设置的灵活底部边距有关。

该建议并未解决问题,但它指向了正确的方向。通过移除 contentView 的灵活高度,问题已得到解决。

因此,如果有人遇到类似问题,请尝试使用您的 autoresizingMasks。

【讨论】:

是的;删除此行解决了问题: contentView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);【参考方案2】:

还要确保所有内容视图的高度都覆盖底部按钮。 我为每个视图设置了不同的颜色来查看它们。

【讨论】:

以上是关于UIScrollView 底部的 UIButtons 没有收到触摸的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 动态内容中的自动布局,底部有 UIButton

如何将UIButton粘贴到UIScrollView的底部? (Chatto框架)

在 UIScrollview 中为 UIButton 添加 UIPangesture 以在所有视图上移动

iPhone + UIScrollView

将事件从 UIScrollView 转发到 UIButton

如何使 UIButton 与 UIScrollView 一起移动