UIScrollView框架在iOS 8和iOS 7上是不同的大小
我实现了一个视图控制器,只显示一个图像,并允许用户捏放大/平移图像周围。 它在iOS 7上效果很好,但在iOS 8上,滚动视图的框架大小不同,最终结果是iPhone上的图像放大得太远,在iOS 8上运行时放大了太多。这是因为滚动视图框架的宽度是600pt,这是故事板(使用大小类的Universal Storyboard)中的大小。 但我有自动布局约束,应该确保滚动视图延伸填补可用空间 – 它应该是iPad上的768pt。 这是在iOS 7,但不是iOS 8的情况。
这是设置:在界面生成器中,我有一个UIViewController
,其中包含一个UIView
,其中包含一个UIScrollView
与自动布局限制尾随,领先,底部和顶部空间的超级视图。 然后在viewDidLoad
:
UIImage *image = [UIImage imageNamed:@"image"]; self.imageView = [[UIImageView alloc] initWithImage:image]; self.imageView.contentMode = UIViewContentModeScaleAspectFit; self.imageView.frame = CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height); [self.scrollView addSubview:self.imageView]; self.scrollView.contentSize = image.size; #warning Bug here - scroll view frame is 600pt on iOS 8 - should be 768 for iPad NSLog(@"scroll view frame wid: %f", self.scrollView.frame.size.width);
我发现如果我把相同的NSLog
在viewDidAppear
框架的宽度是正确的768pt。 我试着将代码移动到viewWillAppear
而不是viewDidLoad
,但是我得到了相同的结果 – 在viewWillAppear
中也是600。 所以滚动视图正确拉伸,以填充显示,但直到它出现在屏幕上。 在图像出现在屏幕上之前,我需要正确的帧大小,以便我可以计算正确的最小和最大缩放值。
我能做些什么来解决这个问题,并确保它适用于iOS 7和8?
我解决了它。 出于某种原因, viewDidLoad
在生命周期中获取iOS 8上的滚动视图的调整框架还为时尚早,但是它仍然适用于iOS 7. viewWillAppear
还为时尚早,还有viewWillLayoutSubviews
。
为了解决这个问题,我只是将需要使用滚动视图的框架大小的代码移动到viewDidLayoutSubviews
,最终获得正确的大小。
我也遇到了类似的问题。 我通过以编程方式更改 scrollview内的contentView的宽度来解决它。 在ViewDidLoad
我调用这个方法
func setupWidthOfContentView(){ let screen = UIScreen.mainScreen().bounds // println("Width: \(screen.size.width) Height: \(screen.size.height)") var constW = NSLayoutConstraint(item: vwContentView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screen.size.width) vwContentView.addConstraint(constW) }
- 自动布局约束更改不animation
- 如何设置子视图控制器的topLayoutGuide位置
- 属性不可用:8.0版本之前的iOS版本的第一个基线布局属性
- iOS 8的自我大小单元不适用于UITableViewCellStyleSubtitle和numberOfLines = 0?
- 带有Interface Builder的iOS8自动调整静态TableView单元格
- iOS 8:UITableViewCell.contentView不调整其中的子视图
- AutoLayout uitableviewcell在横向和iPad上计算基于肖像iPhone的高度
- 首次出现时不能更改UITableViewCell中的UILabel的框架(使用Autolayout)
- 只在iPhone中查看不显示在iPad中