iOS:以编程方式自动调整UIImage

时间:2014-08-27 05:03:13

标签: ios iphone xcode uiimageview autosize

我的应用程序中有一个UIImage,我必须取消选中自动布局框并使用下图所示的选项设置自动调整大小,以便在两种屏幕尺寸(3.5英寸和4英寸)下正确显示图像< / p>

enter image description here

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

我试过这个,但它似乎不起作用?我做错了吗?

file.m

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

3 个答案:

答案 0 :(得分:1)

左侧,右侧和底部存在工字梁意味着它们已经固定(即不灵活),因此您使用UIViewAutoresizingFlexibleLeftMarginUIViewAutoresizingFlexibleRightMarginUIViewAutoresizingFlexibleBottomMargin。没有顶部工字梁意味着你应该使用UIViewAutoresizingFlexibleTopMargin

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

因此,产生:

self.imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;

顺便说一下,你可以凭经验验证。使用您与我们共享的弹簧和支柱的组合在Interface Builder中临时添加视图:

mask

然后您可以使用如下所示的例程来检查该视图的自动调整大小掩码:

- (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

您也可以在调试器中确认这一点,因为它提供了一个检查视图配置(它们的帧和自动调整掩码)的好工具。在调试器中运行应用程序,一旦显示视图,点击暂停按钮。然后,在(lldb)提示符下键入:

(lldb) po [[UIWindow keyWindow] recursiveDescription]

这将产生如下输出:

<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;

答案 1 :(得分:0)

如果您想全屏拍摄图像,请按以下方式进行设置:

enter image description here

希望这会有所帮助.. :)

答案 2 :(得分:0)

UIImageView contentMode属性设置为UIViewContentModeScaleAspectFit

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