Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Xcode 8-自动布局问题_Ios_Objective C_Xcode_Ios Autolayout - Fatal编程技术网

Ios Xcode 8-自动布局问题

Ios Xcode 8-自动布局问题,ios,objective-c,xcode,ios-autolayout,Ios,Objective C,Xcode,Ios Autolayout,我正在用新的Xcode设置基本的UIView子类,遇到了一些奇怪的行为。乍一看,子类视图似乎正常加载: - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self baseInit]; } return self; } - (void)awakeFromNib { [super awakeFromNib];

我正在用新的Xcode设置基本的UIView子类,遇到了一些奇怪的行为。乍一看,子类视图似乎正常加载:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
        if (self) {
            [self baseInit];
}
    return self;
}
- (void)awakeFromNib
{
    [super awakeFromNib];
    [self baseInit];
}
我开始在故事板中构建另一个容器视图,设置为iPhone 6的大小,就像我自己的一样。我的布局有点复杂,几乎没有对象,即使我擅长设置约束,结果还是变了

所以我开始用simple view进行实验,看看Xcode升级后问题出在哪里

带有2个UIView的简单练习

每个约束的首选项设置为1000,设备设置为iPhone 6s。

但在iPhone 6/s或我的设备iPhone 6上的结果发生了变化:

因此,当我开始摆弄时,我发现如果将情节提要设备设置为iPhone SE,它将在iPhone 6模拟器和iPhone 6设备上正确显示内容:

设置错误,现在已对齐。我是否错过了新Xcode版本中的一些东西,以及如何使用自动布局和约束

多谢各位
A.

如果
baseInit
正在处理UIView和帧大小,则应在
ViewDidLayoutSubView
中调用它。根据视图的约束对视图进行布局后,将调用此函数

static dispatch_once_t oncePerLoadToken;

- (void)viewDidLoad {
    [super viewDidLoad];
    oncePerLoadToken = 0;
}

- (void)viewDidLayoutSubviews {
    dispatch_once(&oncePerLoadToken, ^{
        [self baseInit];
    });
}

如果
baseInit
正在对UIView和帧大小执行任何操作,则应在
viewdilayoutsubview
中调用它。根据视图的约束对视图进行布局后,将调用此函数

static dispatch_once_t oncePerLoadToken;

- (void)viewDidLoad {
    [super viewDidLoad];
    oncePerLoadToken = 0;
}

- (void)viewDidLayoutSubviews {
    dispatch_once(&oncePerLoadToken, ^{
        [self baseInit];
    });
}