我创建了一个带有三个子视图的分页UIScrollView。它在横向测试iPhone 5(我设计的方向)时效果很好,但只要设备分辨率发生变化就会中断。
无论设备或方向如何,如何使帧缩放到正确的分辨率?
- (void)viewDidLoad {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * i;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
}
- (IBAction)changePage {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * self.pageControl.currentPage;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
[self.scrollView scrollRectToVisible:frame animated:YES];
pageControlBeingUsed = YES;
}
答案 0 :(得分:1)
将滚动视图放在另一个自定义视图中。在自定义视图中,实现layoutSubviews,如下所示。
@interface ViewScalesOneSubview : UIView
@property UIView *scalingSubview;//subview to scale
@end
@implementation ViewScalesOneSubview
-(void) layoutSubviews {
[super layoutSubviews];
CGRect parentBounds = [self bounds];
CGRect childBounds = [scalingSubview bounds];//unscaled
CGFloat scale = parentBounds.width / childBounds.width;
CGAffineTransform transform = CGAffineTransformMakeScale( scale , scale );
//fiddle with x,y translation to position as you like
scalingSubview.transform = transform;
}
@end
让自定义视图自动调整,使其适合窗口或任何容器,并随旋转而变化。不要让滚动视图自动调整,因为它会与此自定义layoutSubviews冲突。当自定义视图更改大小时,它将缩放scalingSubview以适合。通过对两个轴使用相同的比例,它将保留纵横比。您可以缩放以适应,或使用高度而不是宽度等等。
编辑:
要调整视图大小,而不是缩放视图,请设置自动调整遮罩。
scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
您也可以在界面构建器中执行此操作。