我实现了一个视图控制器,简单地显示一张图片,并允许用户通过捏合手势进行缩放/平移。它在iOS 7上运行良好,但是在iOS 8上,滚动视图的框架大小不同,结果是当在iOS 8上运行时,iPhone上的图像被缩放得太远,iPad上的图像被缩放得太小。这是因为滚动视图帧的宽度为600pt,即在故事板中的尺寸(使用大小类的通用故事板)。但我有自动布局约束,应该确保滚动视图伸展以填充可用空间 - 在iPad上应该为768pt。这在iOS 7上是这样的,但在iOS 8上却不是。
设置如下:在界面构建器中,我有一个包含UIView的UIViewController,其包含具有自动布局约束的UIScrollView,如右侧、左侧、底部和顶部空间给父视图。然后在viewDidLoad中:
我发现如果我把同样的
我该怎么做才能修复它并确保它适用于iOS 7和8?
设置如下:在界面构建器中,我有一个包含UIView的UIViewController,其包含具有自动布局约束的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
中,frame的宽度就是正确的768pt。我试着把这段代码移到viewWillAppear
而不是viewDidLoad
,但结果相同 - 在viewWillAppear
中它仍然是600。因此,滚动视图正确地拉伸以填充显示屏,但直到它出现在屏幕上之后才这样做。我需要在图像出现在屏幕上之前获得正确的框架大小,以便我可以计算正确的最小和最大缩放值。我该怎么做才能修复它并确保它适用于iOS 7和8?
UIView
)会拉伸以填满显示区域,而UIScrollView
始终保持 600x600。除了四个方向到父视图的约束外,没有其他约束,并且内在内容大小是系统定义的默认值。 - Jordan HUIScrollView
在出现后会拉伸以填充显示屏,但在viewDidLoad
中它仍然是 600x600。将更新问题。 - Jordan H