添加NSLayoutConstraint使视图消失

0x新浪

我有一个带有两个子视图的简单视图(控制器):

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *viewA = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
    viewA.translatesAutoresizingMaskIntoConstraints = NO;
    viewA.backgroundColor = [UIColor redColor];
    [self.view addSubview:viewA];


    UIView *viewB = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
    viewB.translatesAutoresizingMaskIntoConstraints = NO;
    viewB.backgroundColor = [UIColor grayColor];
    [self.view addSubview:viewB];
}

当然,它们在这一点上是重叠的(我只能看到viewB)。因此,我添加了一个约束以使viewB低于viewA,如下所示:

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:viewB
                                                      attribute:NSLayoutAttributeTop
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:viewA
                                                      attribute:NSLayoutAttributeBottom
                                                     multiplier:1.f
                                                       constant:0]];

这使两个视图都消失了。我究竟做错了什么?

谢谢!

德尔玛

使用约束时,应该对约束进行所有操作(不设置框架),因此仅添加一个约束不足以定义位置和尺寸。我不确定为什么添加一个约束会否定您为视图设置的大小,但似乎确实如此。您应该执行以下操作来充分描述视图,

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *viewA = [UIView new];
    viewA.translatesAutoresizingMaskIntoConstraints = NO;
    viewA.backgroundColor = [UIColor redColor];
    [self.view addSubview:viewA];


    UIView *viewB = [UIView new];
    viewB.translatesAutoresizingMaskIntoConstraints = NO;
    viewB.backgroundColor = [UIColor grayColor];
    [self.view addSubview:viewB];
    NSDictionary *dict = NSDictionaryOfVariableBindings(viewA,viewB);

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[viewA(==50)]" options:0 metrics:nil views:dict]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[viewB(==50)]" options:0 metrics:nil views:dict]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[viewA(==50)][viewB(==50)]" options:NSLayoutFormatAlignAllLeft metrics:nil views:dict]];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

添加约束后表视图消失

来自分类Dev

从代码添加NSLayoutConstraint

来自分类Dev

Swift:添加NSLayoutConstraint问题

来自分类Dev

NSLayoutConstraint用于UITableView上的视图

来自分类Dev

通过代码将子视图添加到视图中,重新加载后消失

来自分类Dev

父视图的阴影消失了

来自分类Dev

“消失”视图膨胀了吗?

来自分类Dev

TableViewCell 视图消失

来自分类Dev

NSLayoutConstraint:在需要时调整视图大小

来自分类Dev

滚动或添加和列表视图中的项目时按钮的文字消失,Android

来自分类Dev

如何添加一个视图,该视图在向上滚动时会消失(在列表视图中向下),而在向下滚动时会出现?

来自分类常见问题

视图消失时退出EditMode

来自分类Dev

消失的弹出警报视图

来自分类Dev

旋转时OpenGL视图消失

来自分类Dev

容器视图在completeTransition上消失:

来自分类Dev

当视图消失时退出EditMode

来自分类Dev

旋转时OpenGL视图消失

来自分类Dev

ios消失后的更新视图

来自分类Dev

骨干视图显示然后消失

来自分类Dev

Jbutton在设计视图中消失

来自分类Dev

JFormattedTextField 在设计视图中消失

来自分类Dev

在该视图之外单击时视图消失

来自分类Dev

结合仿射变换在子视图上使用NSLayoutConstraint

来自分类Dev

NSLayoutConstraint的幽灵困扰着我的视图层次结构?

来自分类Dev

将视图的NSLayoutConstraint设置为右上方

来自分类Dev

NSLayoutConstraint用于代码中未知数量的子视图

来自分类Dev

添加PhysicalBody使ar对象消失

来自分类Dev

添加JScrollPane时JTextArea消失

来自分类Dev

添加physicsBody使ar对象消失