ant*_*tic 9 iphone objective-c uiscrollview ios autolayout
我对UIScrollView有一个非常大的问题.为了确保它不是我的实际项目,我为iOS 6和7创建了一个新项目,仅限iPhone.我禁用了autolayout.
这是我的代码(ViewDidLoad):
self.scrollView.delegate = self;
[self.scrollView setScrollEnabled:YES];
[self.scrollView setContentSize:CGSizeMake(self.view.frame.size.width, 20000)];
NSLog(@"contentSize width %f", self.scrollView.contentSize.width);
NSLog(@"contentSize height %f", self.scrollView.contentSize.height);
NSLog(@"%@", NSStringFromCGAffineTransform(self.scrollView.transform));
Run Code Online (Sandbox Code Playgroud)
它返回"contentSize width 20000.000000","contentSize height 0.000000"和"[1,0,0,1,0,0]".它向左或向右滚动,向上滚动
请帮忙!
mr.*_*osa 39
在我意识到我没有设置UIScrollView委托之前,我遇到了同样的问题.此外,如果您使用自动布局,则需要等待将布局应用于UIScrollView.这意味着您应该在"viewDidLayoutSubviews"中设置内容大小.
在viewDidLoad方法中,框架可能不正确,将代码移动到此方法:
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
// Your code
}
Run Code Online (Sandbox Code Playgroud)
使用此代码。ScrollView setContentSize 应在主线程中异步调用。
迅速:
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
}
}
Run Code Online (Sandbox Code Playgroud)
目标 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;
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20096 次 |
| 最近记录: |