iOS - 尝试在布局子视图中的子视图上设置自动布局子视图



>我有一个类,它首先初始化时没有设置框架 - 下面的 A 类。 类 A 的实例未使用自动布局进行设置。 它的框架是稍后手动设置的。 但是,我希望 ClassA 的子视图是自动布局的。 问题是我找不到正确的方法来做到这一点。 如果我尝试在调用布局子视图之前(在设置框架之前)设置约束,则约束将不会验证。 如果我在布局子视图中调用 Super 后尝试设置它们,我会得到这个

执行 -layoutSubviews 后仍然需要自动布局。GHTExerciseSetView 的 -layoutSubviews 实现需要调用 super。

如果我尝试在调用 Super 后设置约束(无论如何这似乎都不对),它起初似乎有效,但是当我开始添加更多 ClassA 实例并重新绘制时,我遇到了更多约束未验证的问题。 主要问题是,以这种方式布局视图的正确方法是什么。 谢谢。

@interface ClassA ()
@property (nonatomic, strong) SubView1 *sub1;
@property (nonatomic, strong) SubView2   *sub2;

@end
@implementation ClassA
//this is called initially with no frame
 - (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
      sub1 = [[SubView1 alloc] init];
      sub1.translatesAutoresizingMaskIntoConstraints = NO;
      [self addSubView:sub1];
      //Same for sub2
}
 return self;
}
- (void)layoutSubViews {
     [super layoutSubViews];
}
- (void)updateConstraints {   
    [super updateConstraints];
    //sub1 and sub2 constraints
}

我假设您的约束配置正确。

initWithFrame: 中创建视图层次结构后,请尝试将updateConstraintsIfNeeded发送到 self 。在我自己的应用程序中执行此操作似乎可以解决一些问题。

此外,updateConstraints可能会被多次调用,因此请确保不要一遍又一遍地安装相同的约束。

最新更新