0

我创建了一个带有三个子视图的分页 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;
}
4

1 回答 1

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 冲突。当自定义视图改变大小时,它将缩放缩放子视图以适应。通过对两个轴使用相同的比例,它将保持纵横比。您可以缩放以适应,或使用高度而不是宽度或其他。

编辑:

要调整视图大小,而不是缩放视图,请设置自动调整大小掩码。

scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

https://developer.apple.com/library/ios/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/autoresizingMask

您也可以在界面生成器中执行此操作。

于 2013-01-02T06:20:35.727 回答