我正在尝试以编程方式创建UIScrollView
。我有一个scrollView
的ViewController。以下是我在loadView
中实例化它的方法:
CGRect fullScreenRect = [[UIScreen mainScreen] applicationFrame];
self.scrollView = [[UIScrollView alloc] initWithFrame:fullScreenRect];
self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);
然后我将一些项目添加到其中,然后将其添加到view
中的loadView
,如下所示:
[self.scrollView addSubview:self.searchBar];
[self.scrollView addSubview:button];
[self.view addSubview:self.scrollView];
到目前为止,一切都应该没问题。但是,在其他功能中,我将添加ImageViews
,然后我将需要设置scrollview的内容大小。我这样做只是使用[self.scrollView addToSubView:image]
,当我想编辑scrollview的内容大小时,我按如下方式进行:
// Calculate scroll view size
float sizeOfContent = 0;
for (int i = 0; i < [self.scrollView.subviews count]; i++) {
UIImageView *view =[self.scrollView.subviews objectAtIndex:i];
sizeOfContent += view.frame.size.height;
[view release];
}
// Set content size for scroll view
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, sizeOfContent);
我在main.m类中一直收到EXC_BAD_ACCESS错误。
我怀疑问题在于保留实际的scrollView,因为我认为scrollView
没有保留与视图子视图相同的对象。
有什么建议吗?提前谢谢!
答案 0 :(得分:1)
如果您已将self.scrollView
定义为@property(nonatomic, retain)
,那么第一个错误就是该行;
self.scrollView = [[UIScrollView alloc] initWithFrame:fullScreenRect];
它将scrollView的保留计数设置为2,这不是您所期望的。 alloc
保留了这样的属性,
scrollView = [[UIScrollView alloc] initWithFrame:fullScreenRect];
我认为您的BAD_ACCESS错误来自此处;
for (int i = 0; i < [self.scrollView.subviews count]; i++) {
UIImageView *view =[self.scrollView.subviews objectAtIndex:i];
sizeOfContent += view.frame.size.height;
[view release];
}
为什么你releasing
查看?你没有alloc
它,所以没有理由release
它。删除[view release]
行并再次检查。