完全一样的代码,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;
} - voidsetImage: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 %@", NSStringFromCGRectself.scrollView.frame; [self.spinner stopAnimating];
} - voidsetScrollView: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中看到会有一个窄横条)

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

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

self.edgesForExtendedLayout = UIRectEdgeNone;

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

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

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

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注