[英]iOS ScrollView setContentSize not Working
我正在使用Xcode 8,iOS10。我从Storyboard创建了ScrollView。 我的流程是
[self.scrollView addSubview:parentView]; self.scrollView.frame = CGRectMake(0, 0, 320, parentView.frame.size.height); [self.scrollView setContentSize:CGSizeMake(320, parentView.frame.size.height)];
当我在此代码后打印Scrollview高度时,它显示的“ 680”比“我的视图高度”还要大。 我已经尝试过使用“ viewDidLayoutSubviews”方法,但是ScrollView仍然无法正常工作。 有谁知道为什么它不滚动?
代码中的问题是,您正在从父视图设置scrollview高度和contentSize高度。
您应该执行以下操作:
[self.scrollView addSubview:parentView];
self.scrollView.frame = CGRectMake(0, 0, 320, [UIScreen mainScreen].bounds.size.height);
[self.scrollView setContentSize:CGSizeMake(320, parentView.frame.size.height)];
希望这会有所帮助
您正在设置错误的UIScrollView
框架。 这就是为什么您的内容大小无法正常工作的原因。
尝试这个,
[self.scrollView addSubview:parentView];
self.scrollView.frame = CGRectMake(0, 0, 320, [UIScreen mainScreen].bounds.size.height);
[self.scrollView setContentSize:CGSizeMake(320, parentView.frame.size.height)];
尝试在“接口生成器文档”下禁用自动布局:禁用:“使用自动布局”
就我而言,它正在工作。
动态计算UIScrollview contentSize(取决于子视图框架)并在主线程异步的viewDidLayoutSubviews
中设置它
迅速:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
DispatchQueue.main.async {
var contentRect = CGRect.zero
for view in self.scrollView.subviews {
contentRect = contentRect.union(view.frame)
}
self.scrollView.contentSize = contentRect.size
}
}
目标C:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
dispatch_async(dispatch_get_main_queue(), ^ {
CGRect contentRect = CGRectZero;
for(UIView *view in scrollView.subviews)
contentRect = CGRectUnion(contentRect,view.frame);
scrollView.contentSize = contentRect.size;
});
}
在设置scrollView的框架之前尝试设置layoutIfNeeded
。
我也有类似的情况
-(void)viewDidLoad{
[self.view layoutIfNeeded];
self.myCustomScrollView.frame = self.contentView.bounds;
}
AutoLayout似乎与Xcode8中的帧位置不同。
只是不知道为什么,但是对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.