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
看看。