带有嵌套图像的 UiScrollview 看起来很奇怪
Posted
技术标签:
【中文标题】带有嵌套图像的 UiScrollview 看起来很奇怪【英文标题】:UiScrollview with nested image looks weird 【发布时间】:2015-07-02 14:10:25 【问题描述】:我在 UIViewController 中有一个 UIScrollView(由 ImageViewController 子类化)。 ViewController 本身是 NavigationController 堆栈的一部分。现在,除了有一个导航栏,我希望 ScrollView 占据屏幕上所有可用的空间。然后滚动视图内的 UIImageView 应该填充滚动视图的可用空间。您可以在此帖子的底部查看当前状态。
class ImageViewController: UIViewController, UIScrollViewDelegate
@IBOutlet weak var scrollView: UIScrollView!
var imageView: UIImageView?
var image: UIImage?
override func viewDidLoad()
super.viewDidLoad()
scrollView.delegate = self
if let image = image
imageView = UIImageView(image: image)
if let imageView = imageView
imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: image.size)
scrollView.addSubview(imageView)
scrollView.contentSize = image.size
let scaleHeight = scrollView.frame.size.height / scrollView.contentSize.height
let scaleWidth = scrollView.frame.size.width / scrollView.contentSize.width
let minimumScale:CGFloat = min(scaleHeight, scaleWidth)
let maximumScale:CGFloat = max(scaleHeight, scaleWidth)
scrollView.minimumZoomScale = minimumScale
scrollView.maximumZoomScale = maximumScale
scrollView.zoomScale = maximumScale
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView?
return imageView
代码给我留下了不必要的边框(左、右、上)。我该如何摆脱它们?
编辑:在@Bxtr 的建议和another *** thread 的帮助下,我能够移除滚动视图的左右边框。经过一番挖掘,我发现通过停用Adjust Scroll View Insets,滚动视图内的图像可以正确垂直定位。不过,我一开始不明白垂直错位的原因......
【问题讨论】:
【参考方案1】:您是否检查了边距/填充值,因为它看起来有点像(左右边框的大小相同)。如果不是这样,您能否也发布您的活动 xml 文件,以便我们可以帮助您解决难题的每个部分?
【讨论】:
你在左右边距上是对的!关于垂直问题,我刚刚更新了帖子(问题解决了,但我不明白为什么)。如果您有进一步的见解,我很乐意在这里介绍它们。 当我从 hollydays 回来时,我会做一些进一步的研究,但我很高兴我帮助了你!【参考方案2】:scrollView.contentSize = image.size;
你必须调整这条线。您正在将滚动视图内容大小显式设置为图像大小。您必须设置内容大小以适应屏幕宽度。
【讨论】:
【参考方案3】:您可以在 UIScrollView 中使用 UIView,并且该 UIView 包含 UIImage。 您需要正确设置约束。
【讨论】:
【参考方案4】:经过一番挖掘后,我发现通过停用调整滚动 View Insets,滚动视图里面的图片可以正确 垂直定位。不过,我不明白垂直的原因 一开始就错位了……
原因是视图控制器的automaticAdjustsScrollViewInsets属性默认为YES,以下来自苹果文档:
自动调整ScrollViewInsets
一个布尔值,表示 视图控制器是否应该自动调整其滚动 查看插图。
默认值为YES,允许视图控制器调整它的 滚动视图插入以响应屏幕区域所消耗的 状态栏、导航栏和工具栏或标签栏。如果你设置为 NO 想要自己管理滚动视图插图调整,例如何时 视图层次结构中有多个滚动视图。
除了设置 automaticAdjustsScrollViewInsets = No,使用 autoLayout 时,您可以将 scrollView 固定到 topLayoutGuide(而不是 viewController 的视图顶部)。
【讨论】:
其实scrollView的Top Space已经固定到Top Layout Guide了。使用此设置和 automaticAdjustsScrollViewInsets = YES 会发生垂直错位。所以再一次:我很困惑为什么我必须将属性设置为 NO 才能获得所需的布局。以上是关于带有嵌套图像的 UiScrollview 看起来很奇怪的主要内容,如果未能解决你的问题,请参考以下文章