iOS 7 缩放不能在具有 AutoLayout 的 ScrollView 中工作,但在 iOS8/9 中工作

Posted

技术标签:

【中文标题】iOS 7 缩放不能在具有 AutoLayout 的 ScrollView 中工作,但在 iOS8/9 中工作【英文标题】:iOS 7 zooming is not working in ScrollView with AutoLayout but working in iOS8/9 【发布时间】:2016-02-18 04:13:41 【问题描述】:

我使用UIScrollView 做了一个缩放图像的演示。我的ViewController 只包含一张图片。 问题是图像无法放大 iO7(我已经在 iPhone4S-ios7 上测试过),但在 iOS8/iOS9 中可以正常工作。 关于如何解决它的任何想法?

这是我的代码

#import "ViewController.h"

@interface ViewController ()<UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollview;
@property (weak, nonatomic) IBOutlet UIView *contentview;

@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];
        float minimumScale = [_contentview frame].size.width /[_scrollview frame].size.width;
        _scrollview.maximumZoomScale = 5;  //Change as per you need
        _scrollview.minimumZoomScale = minimumScale;  //Change as you need
        _scrollview.zoomScale = minimumScale;
        _scrollview.delegate =self;
        _scrollview.clipsToBounds = YES;


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    return self.contentview;


@end

这是布局结构

Screen.png 约束 ContentView 约束ScrollView 约束

这是我的演示项目

https://drive.google.com/file/d/0B679aXO0SBmMeUVHTUdOcmxJSXM/view

【问题讨论】:

尝试在viewForZoomingInScrollView中返回图片 我尝试返回图片,但还是不行 现在很有趣,你能分享这个演示项目,这样我就不用创建新的了。 谢谢,请稍等 drive.google.com/file/d/0B679aXO0SBmMeUVHTUdOcmxJSXM/view 这里是项目 【参考方案1】:

高度和宽度 constraints 在 iOS 7 中导致此问题。解决方法是,为 iOS 7 删除那些 constraints 并手动计算 minimumScale。在 IOS 8 及更高版本中,不要更改任何内容。

- (void)viewDidLoad 
    [super viewDidLoad];

    float minimumScale = 1;

    if (floor(NSFoundationVersionNumber) < NSFoundationVersionNumber_iOS_8_0) 
        [self.view removeConstraints:self.heightWidthConstraints];
        minimumScale = self.scrollview.frame.size.width / self.imageView.image.size.width;
    

    _scrollview.maximumZoomScale = 5;  //Change as per you need
    _scrollview.minimumZoomScale = minimumScale;  //Change as you need
    //_scrollview.zoomScale = minimumScale;
    _scrollview.delegate = self;
    //_scrollview.clipsToBounds = YES;

    [self.scrollview setZoomScale:minimumScale animated:YES];

【讨论】:

【参考方案2】:

移除contentView 的宽高限制。 添加contentViewscrollView的centralHorizo​​ntal约束

让我知道它是否有效。

【讨论】:

我最近检查了您的代码,按照给定的步骤进行了更新并经过测试,它在 ios 7 8 9 中运行良好 抱歉回复晚了。我尝试了您的建议,但仍然无法正常工作。你能帮我分享你的代码吗 检查答案中更新的图像。如果你知道了,请告诉我 :((我还是不明白。我有你这样的所有约束 图片可以缩放,但只能在一个方向(垂直)缩放,不能缩放到水平

以上是关于iOS 7 缩放不能在具有 AutoLayout 的 ScrollView 中工作,但在 iOS8/9 中工作的主要内容,如果未能解决你的问题,请参考以下文章

何时在 iOS 7 中使用 AutoLayout 更新约束

iOS Autolayout 2 多行 UILabel 在 UITableViewCell 中具有额外的填充

AutoLayout:在 UIStackView/UITableViewCell 中缩放 UIImageView 的问题

AutoLayout 约束动画从错误的点缩放

以编程方式创建 AutoLayout 约束 (IOS) Xcode 7.0.1

如何在 UIScrollView 内使用 Autolayout 将 UIImage 视图缩放为正方形