Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS 7自动布局-UIScrollView内部的UIImageView_Uiscrollview_Uiimageview_Ios7_Interface Builder_Autolayout - Fatal编程技术网

iOS 7自动布局-UIScrollView内部的UIImageView

iOS 7自动布局-UIScrollView内部的UIImageView,uiscrollview,uiimageview,ios7,interface-builder,autolayout,Uiscrollview,Uiimageview,Ios7,Interface Builder,Autolayout,我在iOS应用程序中有一个简单的视图,这给我带来了一些问题 在这个视图中,我有一个UIScrollView(主视图的全宽/全高),它固定在主视图的顶部/底部/前导/尾随(在IB中) 在UIScrollView内部,我有一个UIImageView,它固定在UIScrollView的上/下/前导/尾随位置 现在,UIImageView中的图像几乎是主视图大小的两倍,因此UIImageView的内容模式设置为Aspect Fit。我的问题是,当我运行项目时,图像以其实际大小显示 UIImageView

我在iOS应用程序中有一个简单的视图,这给我带来了一些问题

在这个视图中,我有一个UIScrollView(主视图的全宽/全高),它固定在主视图的顶部/底部/前导/尾随(在IB中)

在UIScrollView内部,我有一个UIImageView,它固定在UIScrollView的上/下/前导/尾随位置

现在,UIImageView中的图像几乎是主视图大小的两倍,因此UIImageView的内容模式设置为Aspect Fit。我的问题是,当我运行项目时,图像以其实际大小显示

UIImageView位于UIScrollView内部的原因是我希望用户能够放大图像(因此它的大小是原来的两倍)

我还希望用户能够旋转屏幕,因为图像可能是纵向或横向格式,这取决于他们选择在上一个视图中查看的图像


当然,这应该很容易做到(在IB中也是如此),但是我一辈子都搞不清楚。您还必须为UIImageView添加宽度和高度限制。这是因为默认情况下UIImageView具有从图像大小派生的固有内容大小。 以下是用于定义这些约束的代码段:

[scrollView addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeWidth multiplier:1.0f constant:0]];
[scrollView addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeHeight multiplier:1.0f constant:0]];

即使您可以在IB中执行此操作。

如果我理解您的问题,您希望在开始时缩小内容。假设您的内容没有与手机相同的纵横比(一个安全的假设),您可以“信箱”/“窗帘”内容,或者只缩小图像,直到手机上显示图像的高度或宽度(在前面提到的字母框之前)。我选择了后一种方法,并将我的最小缩放设置为任一维度的最大最小缩放

因此,守则是:

// configure image and scroll view for scrolling to extents of actual image
double widthScale = self.view.frame.size.width / image.size.width;
double heightScale = self.view.frame.size.height / image.size.height;
self.scrollView.minimumZoomScale = MAX(widthScale, heightScale);
self.scrollView.maximumZoomScale = MIN(1 / widthScale, 1 / heightScale) / [[UIScreen mainScreen] scale]; // scale to pixel resolution
self.scrollView.zoomScale = self.scrollView.minimumZoomScale;
它假定您正在使用全屏

如果需要任一维度的最小值,请使用以下命令:

self.scrollView.minimumZoomScale = MIN(widthScale, heightScale);

是的,我很欣赏这个标记,但是如果我设置了明确的宽度和高度限制(比如320 x 480),那么当设备旋转时,图像看起来就不对了(如果设备的屏幕尺寸为4英寸,图像看起来也不对)。@Nick不要硬编码宽度和高度。只需设置相应的约束即可。请参阅更新的答案。我以前在IB中尝试过(scrollView/imageView等高)。这让我了解了其中的一部分,因为在纵向/横向模式下,图像现在是imageView中正确的宽度/高度,但是我无法放大图像。