在UIScrollView中滚动和缩放UIImageView

时间:2016-02-21 17:06:19

标签: ios xcode swift

当我尝试滚动或缩放时,没有任何反应。

...

我有一个我在 viewDidLoad()中设置的scrollview

outletCatalogDetailsScrollViewImage.delegate = self;
outletCatalogDetailsScrollViewImage.minimumZoomScale = 1.0;
outletCatalogDetailsScrollViewImage.maximumZoomScale = 10.0;

...

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
  var res: UIView? = nil;
  if scrollView == outletCatalogDetailsScrollViewImage {
    res = self.outletCatalogDetailsImage;
  }
  return res;
}

在这个滚动视图中,我有了imageview。

为了避免在XCode设计器中出现警告,我在UIScrollView中定义了以下约束:

Outlet Catalog Details Image.Center Y = Superview.Center Y
Outlet Catalog Details Image.Center X = Superview.Center X
bottom = Outlet Catalog Details Image.bottom
trailing = Outlet Catalog Details Image.trailing
Outlet Catalog Details Image.top = top
Outlet Catalog Details Image.leading = leading

在主视图中:

Outlet Catalog Details Scroll View Image.leading = Navigation Bar.leading
trailingMargin = Outlet Catalog Details Scroll View Image.trailing

...

我也有一个相同的高度"滚动视图与下方另一个视图之间的高度约束。

我怀疑我的约束是zoom / pan无效的原因。我希望我错过了配置约束的更好方法

1 个答案:

答案 0 :(得分:1)

你的怀疑是正确的。约束是问题。

您提到您必须避免在故事板中发出警告,因此您可以放置​​这些限制。但是,这些限制是有问题的。主要是这4个:

bottom = Outlet Catalog Details Image.bottom
trailing = Outlet Catalog Details Image.trailing
Outlet Catalog Details Image.top = top
Outlet Catalog Details Image.leading = leading

图像有自己的宽度和高度,为什么它必须被约束到滚动视图的宽度和高度?滚动视图的想法是通过更改其边界来移动其所有子视图。滚动视图实际上并不比屏幕大,它的子视图是。

你怎么解决这个问题?您希望没有故事板警告,但您不想要这些限制。你可以做以下两件事之一:

  1. 在代码中创建图像视图
  2. 在故事板中添加占位符约束
  3. 对于您的情况,我强烈建议占位符约束。在故事板中,单击图像视图。然后,转到尺寸检查器,这是右侧导航器左侧的第五个选项卡。

    Size Inspector

    然后,向下滚动到它所说的位置"约束"。双击其中一个有问题的约束(见上文),找到"在构建时删除"复选框。

    enter image description here

    启用该复选框,然后对其他三个约束重复此操作。