UIViewAutoresizingMask 将子视图宽度扩展到父视图之外

Posted

技术标签:

【中文标题】UIViewAutoresizingMask 将子视图宽度扩展到父视图之外【英文标题】:UIViewAutoresizingMask expands subview width beyond superview's bounds 【发布时间】:2018-07-22 03:20:34 【问题描述】:

我需要向一些人展示它在 Autolayout 之前的样子,所以我想尝试自动调整遮罩大小来构建一个如下所示的视图:

 ————————————
|  ————————  |
| |  red   | |
| |        | |
|  ————————  |
|            |
|   yellow   |
 ————————————

我希望红色 UIView 水平扩展,但在设备旋转时将其左、上和右外边距保持在 20 点。

这是我的代码:

// .h

@interface NextViewController : UIViewController

@end

// .m

@interface NextViewController ()

@property (nonatomic) UIView *rectView;

@end

@implementation NextViewController

- (void)loadView 
    self.view = [[UIView alloc] initWithFrame:CGRectZero];
    self.view.backgroundColor = [UIColor yellowColor];

    // 280 width for iPhone 5S when left and right paddings are 20 points
    self.rectView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 280, 100)];
    [self.view addSubview:self.rectView];
    self.rectView.backgroundColor = [UIColor redColor];
    self.rectView.autoresizingMask = UIViewAutoresizingFlexibleWidth;


@end

我的问题是红色 UIView 总是超出黄色 UIView 的宽度:

我打印了红色视图的描述:

Printing description of $15:
<UIView: 0x7fc360e181c0; frame = (20 20; 600 100); autoresize = W; layer = <CALayer: 0x600000226960>>

那我做错了什么?

【问题讨论】:

【参考方案1】:

啊,我明白了。就是这一行:

self.view = [[UIView alloc] initWithFrame:CGRectZero];

正在根据***视图的 CGRectZero 框架评估子视图的自动调整大小掩码,这就是它们未正确调整大小的原因。我在纵向模式下给了它一个 iPhone 5S 屏幕的框架,并且修复了旋转缩放:

self.view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];

【讨论】:

以上是关于UIViewAutoresizingMask 将子视图宽度扩展到父视图之外的主要内容,如果未能解决你的问题,请参考以下文章

将子视图添加到 UICollectionViewCell 子类?

将子字符串转换为字典

PHP DOM 将子元素附加到根

将子 UIViewConroller 添加到 UITabBarController

将子视图置于前面

将子查询(不在)重写为加入