2011-09-07 83 views
3

我想知道在这个scrollView中使用initWithFrame的真正意义是什么,因为我们在此之后还设置了scrollView的尺寸,我们将scrollView作为视图的子视图添加。带有self.view.frame的initWithFrame:是否有必要?

那么为什么我们需要指定这个initWithFrame呢?我其实并不真正了解它时,框架是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]; 

感谢

+4

你应该调用initWithFrame传递'self.view.bounds',而不是'frame'。 – progrmr

+1

事实上,如果self.view.frame有一个非零原点,那么你的滚动视图将被偏移相同的数量,可能不是你想要的。填充其父视图的子应该将其框架设置为parentView.bounds。 –

+0

@Mike Weller:好的,谢谢,是不是总是这样,用uiimageView或uiscrollView指定initWithFrame?我有点困惑,因为我假设“孩子”知道它的父界...编辑:另外,在这种情况下,我们看到非零起源的框架? – Paul

回答

2

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

+0

谢谢,是的,我了解内容,所以如果我们在顶部设置一个工具栏,滚动视图将通过设置self.view.frame隐藏它? (“填充整个视图”)我有点困惑self.view.bounds或.frame,以及为什么有必要使用它。再次感谢 – Paul

+0

如果工具栏/导航栏/选项卡栏在层次结构中显示为较高的控制器,则no,scrollview(或当前视图中的任何其他子视图)将不会隐藏它,因为当前视图缩小到显示所有栏后留下的内容。至于边界和帧 - 如果它说'initWithFrame:' - 在这种情况下使用父视图的帧,self.view.frame。或者你可以在Interface Builder中直观地构建界面(我更喜欢非动态界面)。 –

+0

好的非常感谢 – Paul

相关问题