UIViewAutoresizingMask将子视图宽度扩展到超级视图的范围之外

时间:2018-07-22 03:20:35

标签: ios objective-c cocoa-touch uikit

我需要向人们展示自动布局之前的情况,所以我想尝试自动调整蒙版的大小以构建如下所示的视图:

 ————————————
|  ————————  |
| |  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的宽度:

enter image description here

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

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

那我在做什么错了?

1 个答案:

答案 0 :(得分:0)

啊,我明白了。是这行:

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

正在根据顶级视图的CGRectZero框架评估子视图的自动调整蒙版,这就是为什么未正确调整其大小的原因。我改用纵向模式将其设置为iPhone 5S屏幕的框架,并固定了旋转缩放比例:

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