【问题标题】:Setting bounds on a UIScrollView在 UIScrollView 上设置边界
【发布时间】:2013-08-05 19:42:52
【问题描述】:

我有一个 UIScrollView,它包含两个子视图,每个子视图都是设备屏幕的大小。我在AppDelegate 中设置了子视图的大小:

CGRect screenRect = [[self window] bounds];
[[myViewController1 view] setFrame:screenRect];
screenRect.origin.x = screenRect.size.width;
[[myViewController2 view] setFrame:screenRect];

然后我将这些视图添加到 UIScrollView 并将 UIScrollView 的 contentSize 设置为屏幕宽度的两倍:

CGRect containerRect = CGRectMake(0, 0, screenRect.size.width * 2, screenRect.size.height);
UIScrollView *sv = (UIScrollView *)[myRootViewController view];
[sv addSubview:[myViewController1 view]];
[sv addSubview:[myViewController2 view]];
[sv setFrame:[[self window] bounds]];
[sv setContentSize:containerRect.size];

当应用程序运行时,我可以看到并排的视图,正如预期的那样。但是,两个视图都比屏幕宽度宽得多。此外,UIScrollView 不限制垂直滚动,我希望它的高度等于屏幕高度。

如何使 UIScrollView 限制垂直滚动并强制其子级在适当大小的框架中呈现?

【问题讨论】:

  • 你没有设置滚动视图框架只是它的内容大小
  • @Eyeball:我确实之前设置了框架,我只是忘了在这里添加。我已经编辑了我的问题,谢谢。
  • rootviewcontroller 实际上是滚动视图吗?它是通过编程还是通过 IB 创建的?
  • 什么方法包含你问题中的代码?

标签: ios objective-c uiscrollview


【解决方案1】:

您是否记录了您的 [[self window] bounds]?它可能包含状态栏,这会使您的内容视图 20pts 太高(从而启用垂直滚动)。也许:

CGRect screenFrame = [[UIScreen mainScreen] applicationFrame];
myViewController1.view.frame = CGRectMake(0.0, 0.0, CGRectGetWidth(screenFrame), CGRectGetHeight(screenFrame));
myViewController2.view.frame = CGRectOffset(myViewController1.view.frame, CGRectGetWidth(screenFrame), 0.0);

然后:

CGRect contentRect = CGRectMake(0, 0, CGRectGetWidth(screenFrame), CGRectGetHeight(screenFrame));
UIScrollView *sv = (UIScrollView *)myRootViewController.view;
[sv addSubview:myViewController1.view];
[sv addSubview:myViewController2.view];
[sv setContentSize:contentRect.size];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多