iOS:以编程方式自动化UIImage

我在我的应用程序中有一个UIImage,我不得不取消选中自动布局框,并使用下图中显示的选项设置自动resize,以便在两种屏幕尺寸(3.5英寸和4英寸)

在这里输入图像说明

我的问题是,如何在代码中设置这些选项?

我试过这个,但似乎没有工作? 难道我做错了什么?

file.m

// Autosizing ImageOne ImageOne.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin |UIViewAutoresizingFlexibleTopMargin; 

左侧,右侧和底部存在I型光束意味着它们是固定的(即不灵活),所以不应该使用UIViewAutoresizingFlexibleLeftMarginUIViewAutoresizingFlexibleRightMarginUIViewAutoresizingFlexibleBottomMargin 。 顶部I型梁的缺席意味着您应该使用UIViewAutoresizingFlexibleTopMargin

宽度箭头的存在意味着宽度是灵活的,因此您应该包含UIViewAutoresizingFlexibleWidth 。 但没有高度箭头意味着UIViewAutoresizingFlexibleHeight不应该被使用。

因此,这产生:

 self.imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; 

顺便说一句,你可以validation这个经验。 使用您与我们共享的spring和struts的组合临时添加一个视图到Interface Builder:

面具

然后,您可以使用类似下面的例程来检查该视图的自动resize掩码:

 - (void)examineAutosizingMask:(UIView *)view { NSDictionary *masks = @{@"UIViewAutoresizingFlexibleBottomMargin" : @(UIViewAutoresizingFlexibleBottomMargin), @"UIViewAutoresizingFlexibleHeight" : @(UIViewAutoresizingFlexibleHeight), @"UIViewAutoresizingFlexibleLeftMargin" : @(UIViewAutoresizingFlexibleLeftMargin), @"UIViewAutoresizingFlexibleRightMargin" : @(UIViewAutoresizingFlexibleRightMargin), @"UIViewAutoresizingFlexibleTopMargin" : @(UIViewAutoresizingFlexibleTopMargin), @"UIViewAutoresizingFlexibleWidth" : @(UIViewAutoresizingFlexibleWidth) }; for (NSString *key in masks) { if (view.autoresizingMask & [masks[key] longValue]) { NSLog(@"%@", key); } } } 

上面的例程将确认你想要UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth

您也可以在debugging器中进行确认,因为它提供了一个很好的工具来检查视图(它们的框架和自动调整掩码)的configuration。 在debugging器中运行应用程序,一旦呈现视图,点击暂停button。 然后,在(lldb)提示符下键入:

 (lldb)po [[UIWindow keyWindow]recursion描述]

这将产生像这样的输出:

 <UIWindow: 0x8c61080; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x8c60070>; layer = <UIWindowLayer: 0x8c609b0>> | <UIView: 0x8c614d0; frame = (0 0; 320 480); autoresize = RM+BM; layer = <CALayer: 0x8c615b0>> | | <UIImageView: 0x8d212a0; frame = (80 159; 160 263); autoresize = W+TM; userInteractionEnabled = NO; layer = <CALayer: 0x8d213a0>> 

正如你所看到的,这也是报告,宽度和顶边自动大小的面具已被使用(它说W+TM )。 该输出对于诊断帧大小也是有用的。


顺便说一下,除了如上所述设置自动调整位掩码之外,您可能还需要确认内容模式和剪辑设置。 值得注意的是,您可能还想确保将图像视图剪辑到其边界(否则图像可能会溢出边界,误导您实际的帧大小):

 self.imageView.clipsToBounds = YES; 

如果你想全屏显示图像,请按如下设置:

在这里输入图像说明

希望这可以帮助.. :)

UIImageView contentMode属性设置为UIViewContentModeScaleAspectFit

 ImageOne.contentMode = UIViewContentModeScaleAspectFill; ImageOne.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin |UIViewAutoresizingFlexibleTopMargin;