【问题标题】:initWithFrame with self.view.frame : is it necessary?initWithFrame 和 self.view.frame :有必要吗?
【发布时间】:2016-05-12 13:46:35
【问题描述】:

我想知道在这个scrollView上使用initWithFrame的真正意义是什么,因为在那之后我们还设置了scrollView的尺寸,并且我们将scrollView添加为视图的子视图。

那么为什么我们需要指定这个 initWithFrame 呢?当frame是self.view.frame的时候我其实不是很懂(如果我们设置一个不同的矩形,比如0,0 50,50我会更好理解)

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

scrollView.contentSize = CGSizeMake(847, 1129);
UIImageView *imageView = [[UIImageView alloc] initWithImage: image];
[scrollView addSubview:imageView];
[self.view addSubview:scrollView];

谢谢

【问题讨论】:

  • 你应该调用 initWithFrame 传入self.view.bounds,而不是frame
  • 确实,如果 self.view.frame 的原点不为零,那么您的滚动视图将偏移相同的量,可能不是您想要的。填充其父视图的子视图应将其框架设置为 parentView.bounds。
  • @Mike Weller :好的,谢谢,总是用 uiimageView 或 uiscrollView 指定 initWithFrame 吗?我有点困惑,因为我假设“孩子”知道它的父边界......编辑:另外,在这种情况下,我们会看到具有非零原点的框架吗?
  • 你总是需要设置一个框架,否则默认将是 CGRectZero 所以视图将不可见,因为它的宽度和高度为零。但是,UIImageView 有点不同,因为它会在您设置图像时自动调整其大小。但是,您仍然需要设置其框架的原点 (x, y) 以准确更改它在父视图中的位置。

标签: ios objective-c uiscrollview


【解决方案1】:

self.view 在这种情况下是包含滚动视图的视图,因此当设置为 self.view.frame 时,滚动视图会填充整个视图。框架和内容大小是不同的——滚动视图的框架定义了滚动视图的可见部分,内容大小定义了滚动视图内可滚动(可缩放)内容的大小。

【讨论】:

  • 谢谢,是的,我理解内容大小,所以如果我们在顶部设置一个工具栏,滚动视图将通过设置 self.view.frame 来隐藏它? (“填充整个视图”)我对 self.view.bounds 或 .frame 有点困惑,以及为什么有必要使用它。再次感谢
  • 如果工具栏/导航栏/标签栏由层次结构中更高的控制器显示,那么不,滚动视图(或当前视图中的任何其他子视图)不会隐藏它,因为当前视图毕竟缩小到剩下的条形图已显示。至于边界和框架——如果它说initWithFrame:——在这种情况下使用父视图的框架,self.view.frame。或者您可以在 Interface Builder 中直观地构建界面(我更喜欢非动态界面)。
猜你喜欢
  • 1970-01-01
  • 2016-10-03
  • 2012-12-14
  • 2013-10-28
  • 1970-01-01
  • 2021-11-11
  • 2016-04-24
  • 2011-06-06
  • 1970-01-01
相关资源
最近更新 更多