iOS:以编程方式自动化UIImage
我在我的应用程序中有一个UIImage,我不得不取消选中自动布局框,并使用下图中显示的选项设置自动resize,以便在两种屏幕尺寸(3.5英寸和4英寸)
我的问题是,如何在代码中设置这些选项?
我试过这个,但似乎没有工作? 难道我做错了什么?
file.m
// Autosizing ImageOne ImageOne.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin |UIViewAutoresizingFlexibleTopMargin;
左侧,右侧和底部存在I型光束意味着它们是固定的(即不灵活),所以不应该使用UIViewAutoresizingFlexibleLeftMargin
, UIViewAutoresizingFlexibleRightMargin
或UIViewAutoresizingFlexibleBottomMargin
。 顶部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;