首页 > 完全一样的代码,UIImageView 位置不同

完全一样的代码,UIImageView 位置不同


xcode,IOS,所有版本完全相同。
代码完全一样却是两个结果。(可以适配的是照着写的,错位的是我自己写的,UI部分是一样的)我特意把能对齐的版本的所有代码,你黏贴到另一个,效果不变。另一个正好空出一个bar的宽度,好像是故意的(横屏也会相应变窄)
这是对应frame NSLog输出

self.scrollView.contentSize {3264, 2448}
self.scrollView.frame {{0, 64}, {320, 504}}
self.imageView.frame {{0,0},{3264, 2448}}

    self.view.backgroundColor = [UIColor purpleColor];
    self.imageView.backgroundColor = [UIColor greenColor];
    self.scrollView.backgroundColor = [UIColor blueColor];

这是布局,我特意关掉autolayout

关键代码

- (UIImageView *)imageView {
    if (!_imageView) {
        _imageView = [[UIImageView alloc] init];
    }
    return _imageView;
}

- (UIImage *)image {
    return self.imageView.image;
}

- (void)setImage:(UIImage *)image {
    self.imageView.image = image;
    //self.imageView.contentMode = UIViewContentModeScaleAspectFit;
    [self.imageView sizeToFit]; 
    self.scrollView.contentSize = self.image ? self.image.size : CGSizeZero; 
    NSLog(@"self.scrollView.frame %@", NSStringFromCGRect(self.scrollView.frame));
    [self.spinner stopAnimating];
}

- (void)setScrollView:(UIScrollView *)scrollView {
    _scrollView = scrollView;
    _scrollView.minimumZoomScale = 0.2;
    _scrollView.maximumZoomScale = 2.0;
    _scrollView.delegate = self;
    self.scrollView.contentSize = self.image ? self.image.size : CGSizeZero;
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return self.imageView;
}

我去掉的bar,还是自动空开了横条的距离(在XCODE中看到会有一个窄横条)


self.edgesForExtendedLayout = UIRectEdgeNone;

加上这一行代码,才能保证边缘不扩展。默认为UIRectEdgeAll。这个属性是UIViewController在iOS7以后才有的。


我认为是第二个控制器的navigationBar没有穿透效果,translucent = NO了,控制器的根视图原点在屏幕原点下方64的位置上,你的图片frame没有变,父view相对位置有变化,于是图片也被往下推了64


伴随着全屏布局,iOS 7 以后 View Controller 添加了几个相关的属性来方便我们来做页面布局:

@property (nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll
@property (nonatomic,assign) BOOL extendedLayoutIncludesOpaqueBars NS_AVAILABLE_IOS(7_0); // Defaults to NO, but bars are translucent by default on 7_0.  
@property (nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES

安利一下 iOS View Controller 全屏布局,你能应该能清晰的了解到这 3 个属性具体是如何影响 UIViewController 的页面布局的,希望对你有用。


这跟图片没关系,是navigation bar的问题。你先在viewDidLoad里加一句self.automaticallyAdjustsScrollViewInsets = NO;,然后检查一下你有没有操作过 navigation bar。我不知道上面那个还是下面那个是你自己写的,加一句self.navigationController.navigationBar.translucent = YES或者= NO看看。

【热门文章】
【热门文章】