【问题标题】:UIButton in scrollView unresponsive when outside initial frame在初始帧之外时,滚动视图中的 UIButton 无响应
【发布时间】:2014-01-30 23:34:31
【问题描述】:

我在 xib 中创建了一个很长的视图(>2000 像素)。这个 xib 被加载,然后,在它的 ViewController 中,我将根视图切换为滚动视图(我希望滚动 2000 像素);

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIView *view = self.view;

    UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:self.view.frame];

    scroll.contentSize = self.view.bounds.size;

    self.view = scroll;
    [scroll addSubview:view];
}

长视图有一个按钮,但如果它位于长视图顶部之外(即初始屏幕框架之外),它不会触发。

This post 看起来很相似,但略有不同,因为 SO 用户正在动态扩展滚动视图的大小。在这种情况下,固定大小的滚动视图(全屏),但我不能在我的 xib 中点击初始帧之外的东西。在调试期间,我可以看到滚动视图和内容视图的框架都已设置(并且很长)...

<UIView: 0x946db50; frame = (0 0; 320 2320); autoresize = W+H; layer = <CALayer: 0x946db20>>

<UIScrollView: 0x9077e10; frame = (0 0; 320 2320); clipsToBounds = YES; gestureRecognizers = <NSArray: 0xb388bd0>; layer = <CALayer: 0x9276f60>; contentOffset: {0, 0}>

我怎样才能确保点击可以使控件滚动到视图中?

【问题讨论】:

  • 查看我的更新解决方案了解更多详情

标签: ios xcode uiscrollview uibutton xib


【解决方案1】:

通过反复试验,我解决了这个问题,但我不确定它为什么会起作用。在上面的代码中,我将 UIScrollView 初始化为与内容视图具有相同大小的框架(这实际上没有意义,根本不知道它为什么会滚动)。

相反,我让它调整到屏幕大小(因为它将是全屏):

UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds];

现在一切顺利。奇怪的;很想知道为什么会这样。

【讨论】:

    【解决方案2】:
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
    

    这将创建一个滚动视图以匹配视图控制器的实际视图然后

     UIView *newView=[[UIView alloc] initWithFrame:CGRectMake(0,0,320,2320)];
    
    [scrollView addSubview:newView];
    

    //你也可以从故事板中的长视图创建这个视图,永远不要在滚动中使用 self.view 这使得 Ur 层次结构至关重要,在控制器内添加更多长视图,然后将该视图引用到视图中的新实例-控制器然后在这里使用

    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, newview.frame.size.height);
    

    然后设置

    旧答案

    将你的滚动视图的 contentsize 属性设置为你的滚动视图的高度和滚动视图内视图的宽度...

    【讨论】:

      猜你喜欢
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多