我在UIViewController中有一个UIScrollView(由ImageViewController子类化)。 ViewController本身是NavigationController堆栈的一部分。现在,除了有一个导航栏,我希望ScrollView能够占用屏幕上所有可用的空间。然后,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 stackoverflow thread,我可以删除左右滚动视图的边框。经过一些挖掘后,我发现通过停用Adjust Scroll View Insets,滚动视图内的图像可以正确垂直定位。尽管如此,我还是没有找到垂直错位的原因......
答案 0 :(得分:5)
您是否检查了边距/填充值,因为它看起来如此(左右边框的大小相同)。如果不是这样的话,您还可以发布活动的xml文件,以便我们可以帮助您完成拼图的每个部分吗?
答案 1 :(得分:3)
scrollView.contentSize = image.size;
你必须调整这一行。您明确将滚动视图内容大小设置为图像大小。您必须设置内容大小以适合屏幕宽度。
答案 2 :(得分:2)
您可以在UIScrollView中使用UIView,并且UIView包含UIImage。 您需要正确设置约束。
答案 3 :(得分:0)
经过多次挖掘后,我发现通过停用Adjust Scroll来解决这个问题 查看Insets,滚动视图内的图像可以正确显示 垂直定位。不过,我还没有得到垂直的理由 首先是错位......
原因是视图控制器的automaticAdjustsScrollViewInsets属性默认为YES,以下是来自apple文档:
automaticAdjustsScrollViewInsets
指示的布尔值 视图控制器是否应自动调整其滚动 查看插图。
默认值为YES,允许视图控制器调整其值 滚动视图插入以响应所消耗的屏幕区域 状态栏,导航栏以及工具栏或标签栏。如果你设置为NO 想要自己管理滚动视图插入调整,例如何时 视图层次结构中有多个滚动视图。
除了设置automaticAdjustsScrollViewInsets = No之外,您还可以在使用autoLayout时将scrollView固定到topLayoutGuide(而不是viewController' s视图的顶部)。