我有一个包含 UIImageView 的 UIView。 UIImageViews 就像应用程序的品牌 Logo 一样工作。当我旋转设备时,包含的 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 会拉伸(stretch)自身以跟随其大小的变化容器,UIImage 适合 UIImageView 并放在它的中心。
当我直接以横向模式启动应用程序时,同样的情况发生了——相反的情况:
然后我旋转它:
...我得到了顶部和底部带有额外边框的 Logo 。
我确实看到我可以编写一个函数来重新计算每次旋转更改时的每个大小,但我问自己是否有办法设置 UIImageView 和 UIImage 以使其在不破坏自动旋转/调整大小的情况下工作iOS的程序。听起来很简单!
最佳答案
您可以通过不使用 UIViewContentModeScaleAspectFit
来解决这个问题,而是计算图像的纵横比,并根据另一个(宽度或高度)使用它来明确显示宽度或高度。
例如我旋转到横向,所以我希望高度为 View 的 80%。
CGFloat w = logo.image.size.width;
CGFloat h = logo.image.size.height;
CGFloat a = w / h;
CGFloat h_use = self.view.height *0.8;
CGFloat w_use = h_use*a;
此外,将内容模式设置为 UIViewContentModeScaleAspectFill
而不是现在您已经明确设置了纵横比。
关于ios - 使 UIImageView 及其 UIImage 按比例缩放而无需额外填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899011/