【问题标题】:Xcode 8 - Autolayouts IssueXcode 8 - 自动布局问题
【发布时间】:2016-10-05 23:05:52
【问题描述】:

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

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
        if (self) {
            [self baseInit];
}
    return self;
}
- (void)awakeFromNib
{
    [super awakeFromNib];
    [self baseInit];
}

我开始在故事板中构建另一个容器视图,设置为我拥有的 iPhone 6 的大小。我的布局有点复杂,对象很少,即使我擅长设置约束,它也出现了偏移。

于是我开始尝试简单视图,看看Xcode升级后问题出在哪里。

带有 2 个 UIView 的简单练习。

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

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

所以当我开始摆弄时,我发现如果将故事板设备设置为 iPhone SE,它会在 iPhone 6 模拟器和 iPhone 6 设备上正确显示内容:

设置错误,现在已对齐。我是否遗漏了新 Xcode 版本中的某些内容以及如何使用自动布局和约束?

谢谢 A.

【问题讨论】:

    标签: ios objective-c xcode ios-autolayout


    【解决方案1】:

    如果baseInit 正在使用 UIViews 和帧大小做任何事情,您应该在 viewDidLayoutSubviews 中调用它。在根据视图的约束对视图进行布局后调用此方法。

    static dispatch_once_t oncePerLoadToken;
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        oncePerLoadToken = 0;
    }
    
    - (void)viewDidLayoutSubviews {
        dispatch_once(&oncePerLoadToken, ^{
            [self baseInit];
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 2015-12-09
      • 1970-01-01
      相关资源
      最近更新 更多