我有一个包含 UIImageView 的 UIView。UIImageViews 的工作方式类似于应用程序的品牌标志。当我旋转设备时,包含的 UIView 会根据屏幕的横向或纵向比例调整自身大小。
我想要实现的是让 UIImageView 相应地缩放,同时在左边距上保持比例。
这是顶部白色“横幅”的实际代码:
UIView *topBanner = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, height_topBanner)];
[topBanner setAutoresizingMask:(UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin)];
[topBanner setBackgroundColor:[UIColor whiteColor]];
topBanner.autoresizesSubviews = YES;
// the logo
UIImage *topBanner_logo = [UIImage imageNamed:@"logo.png"];
float logoAspectRatio = topBanner_logo.size.width/topBanner_logo.size.height;
topBanner_logoView = [[UIImageView alloc] initWithFrame:CGRectMake(topBanner.frame.size.width/100*3, topBanner.frame.size.height/100*7, (topBanner.frame.size.height/100*86)*logoAspectRatio, topBanner.frame.size.height/100*86)];
[topBanner_logoView setImage:topBanner_logo];
topBanner_logoView.backgroundColor = [UIColor blueColor];
topBanner_logoView.contentMode = UIViewContentModeScaleAspectFit;
[topBanner_logoView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleRightMargin)];
[topBanner addSubview:topBanner_logoView];
[self.view addSubview:topBanner];
这是我的起点:启动时的 iPad 肖像:
这就是我在横向旋转它时发生的情况:
如您所见,UIImage 的比例还可以,但是我得到了额外的边框(我设置了 UIImageView 的背景颜色以突出显示它),因为 UIImageView 会随着容器大小的变化而伸展自己,并且UIImage 适合 UIImageView 并放在其中心。
当我直接以横向模式启动应用程序时,也会发生相同的情况 - 反过来:
然后我旋转它:
...我得到了顶部和底部带有额外边框的徽标。
我确实看到我可以编写一个函数来重新计算每次旋转更改时的每个大小,但我问自己是否有办法设置 UIImageView 和 UIImage 以使其工作而无需破解 iOS 的自动旋转/调整大小程序. 听起来很简单!