iOS ScrollView setContentSize 不起作用
Posted
技术标签:
【中文标题】iOS ScrollView setContentSize 不起作用【英文标题】:iOS ScrollView setContentSize not Working 【发布时间】:2016-10-07 10:24:40 【问题描述】:我正在使用 Xcode 8、ios 10。我从 Storyboard 中创建了 ScrollView。我的流程是
viewDidLoad 方法有 Restcall,从服务器获取信息。 返回时,我解析了 Response 并基于该 Create UIElements in Method 然后添加到一个 ParentView。 最后 ParentView 将被添加到 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 仍然无法正常工作。 有谁知道为什么它不滚动?
【问题讨论】:
see links provided inside here。可能是布局设置的问题。 你使用自动布局吗? 【参考方案1】:您的代码中的问题是您从 父视图 设置 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)];
希望这会有所帮助
【讨论】:
非常感谢你拯救了我的一天。【参考方案2】:您设置了错误的框架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)];
【讨论】:
非常感谢您的回复。【参考方案3】:尝试在“Interface Builder Document”下禁用自动布局 disable:“Use Autolayout”
它在我的情况下工作。
【讨论】:
【参考方案4】:动态计算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;
);
【讨论】:
【参考方案5】:在设置滚动视图的框架之前尝试设置layoutIfNeeded
。
我的情况跟你一样。
-(void)viewDidLoad
[self.view layoutIfNeeded];
self.myCustomScrollView.frame = self.contentView.bounds;
AutoLayout 似乎与 Xcode8 中的帧位置不同。
只是不知道为什么,但它对我有用。
【讨论】:
以上是关于iOS ScrollView setContentSize 不起作用的主要内容,如果未能解决你的问题,请参考以下文章