在左侧、右侧和底部出现工字梁意味着它们是固定的(即不灵活),因此您应该不使用UIViewAutoresizingFlexibleLeftMargin、UIViewAutoresizingFlexibleRightMargin、或UIViewAutoresizingFlexibleBottomMargin。没有顶部工字梁意味着您应该使用UIViewAutoresizingFlexibleTopMargin。
宽度箭头的存在意味着宽度是灵活的,因此您应该包括UIViewAutoresizingFlexibleWidth。但是没有高度箭头意味着不应该使用UIViewAutoresizingFlexibleHeight。
因此,产生:
self.imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
顺便说一句,您可以凭经验验证这一点。使用您与我们共享的弹簧和支柱的组合在 Interface Builder 中临时添加一个视图:
然后您可以使用如下例程来检查该视图的自动调整大小掩码:
- (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;