如何在滚动视图中将内容居中?

Posted

技术标签:

【中文标题】如何在滚动视图中将内容居中?【英文标题】:How do you center the content in a scrollview? 【发布时间】:2015-10-09 17:34:33 【问题描述】:

我知道这应该是一个很容易解决的问题,但我似乎没有得到想要的结果。

我有一个宽度为 320 的水平滚动 UIScroll 视图。其内容的宽度为 467。我还有一个高度为 310 的垂直滚动 UIScroll 视图。其内容的高度也是 467。

在互联网上搜索答案后,我最接近的解决方案是:

CGFloat newContentOffsetX = (ScrollView.contentSize.width/2) - (ScrollView.bounds.size.width/2);
ScrollView.contentOffset = CGPointMake(newContentOffsetX, 0);

代码出现错误,可能是因为它是在 2013 年编写的。而且我知道这段代码只会将内容水平居中。

非常感谢您的帮助!

【问题讨论】:

你遇到了什么错误? 【参考方案1】:

我一般在viewDidLayoutSubviews里面设置contentOffset,类似下面的sn-p代码

override func viewDidLayoutSubviews() 
    // Center the ScrollView content
    let centerOffsetX = (scrollView.contentSize.width - scrollView.frame.size.width) / 2
    let centerOffsetY = (scrollView.contentSize.height - scrollView.frame.size.height) / 2
    let centerPoint = CGPoint(x: centerOffsetX, y: centerOffsetY)
    self.scrollView.setContentOffset(centerPoint, animated: true)

【讨论】:

【参考方案2】:

我在应用中使用的这段代码

    func scrollViewDidZoom(scrollView: UIScrollView) 
    let offsetX = scrollView.bounds.size.width > scrollView.contentSize.width ? (scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5 : 0.0;
    let offsetY = scrollView.bounds.size.height > scrollView.contentSize.height ? (scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5 : 0.0;
    _imageView.center = CGPointMake(scrollView.contentSize.width / 2 + offsetX, scrollView.contentSize.height / 2 + offsetY);

【讨论】:

以上是关于如何在滚动视图中将内容居中?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI当总内容宽度小于屏幕宽度时,如何在动态水平滚动视图中居中内容

滚动视图的水平居中内容

如何在视图中居中滚动视图

当内容适合滚动视图边界时,SwiftUI ScrollView 不会使内容居中

在滚动视图中使用自动布局缩放图像如何居中?

如何在设置了“等宽”的滚动视图中嵌入的堆栈视图中将标签文本设置为远离视图边缘?