我有一个UIScrollView,它包含一个UIView,后者又有一个UIImageView和几个UIButtons。 我遇到的问题是图像显示在导航栏下方大约20 px。
似乎有类似问题的人有像设置
这样的解决方案self.automaticallyAdjustsScrollViewInsets = NO;
或只是隐藏状态栏
- (BOOL)prefersStatusBarHidden {
return YES;
}
然而,这两种解决方案对我都不起作用。第一个设置内容太高,而在底部添加20px空间。第二个隐藏状态栏,但偏移仍然存在。
由于我有很多来自this tutorial by Ray Wenderlich的代码,而且我不知道代码中究竟存在哪个问题,this is the link to code on github。
任何人都可以帮助我吗?
答案 0 :(得分:1)
我能够弄清楚发生了什么。感谢您发布指向您应用的链接。
问题是以下代码:
if (contentsFrame.size.height < boundsSize.height) {
contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f;
} else {
contentsFrame.origin.y = 0.0f;
}
事实证明,contentsFrame.size.height
在首次显示地图时实际上小于bounds.Size.height
。因此,您的代码将图像垂直居中。这就是为什么你看到顶部的偏移。准确地说是17.279像素。
我一直在玩你的应用程序(看起来非常有趣),我相信你可以完全摆脱对centerScrollViewContents
的两次调用,它会像你期望的那样工作。
如果您有更多问题,请与我们联系。
希望这有帮助!
答案 1 :(得分:0)
正确的解决方案是来自@LuisCien
的解决方案我在这里添加我发现在使用带有MPMediaPickerController的UIScrollView时它很有用,所以:
- (void)fixViewFrameBoundSize {
CGRect contentsFrame = self.view.frame;
CGSize boundsSize = self.view.bounds.size;
if (contentsFrame.size.height < boundsSize.height) {
contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f;
} else {
contentsFrame.origin.y = 0.0f;
}
[self.view setFrame:contentsFrame];
}
和
- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker {
[self dismissViewControllerAnimated:YES completion:^{
dispatch_async(dispatch_get_main_queue(), ^{
[self fixViewFrameBoundSize];
});
}];
}
和所选项目回调相同:
[self dismissViewControllerAnimated:YES
completion:^{
//LP : get item url and play
dispatch_async(dispatch_get_main_queue(), ^{
[self fixViewFrameBoundSize];
});
MPMediaItem *item = [collection representativeItem];
当你有一个带有UIView的XIB时,这个解决方案很有效,你可以在UISCrollView中对它进行转换,如下所示:
- (void)scrollViewMakeScrollable {
CGSize scrollableSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height+44.0);
[((UIScrollView*)self.view) setContentSize:scrollableSize];
[((UIScrollView*)self.view) setAlwaysBounceHorizontal:NO];
[((UIScrollView*)self.view) setAlwaysBounceVertical:NO];
self.automaticallyAdjustsScrollViewInsets = NO;
}
通常在你做的时候
- (void) viewDidLoad {
[super viewDidLoad];
[self scrollViewMakeScrollable];