具有顶部空间的UIView对于UIStackView的约束未显示在Stackview下方

时间:2015-10-30 10:57:47

标签: ios objective-c autolayout uistackview

我的问题有点难以描述:

我正在开发笔记应用。我的#34;创建一个新笔记" - 屏幕包含垂直堆栈视图,以显示与新笔记关联的待办事项。 在此堆栈视图下方有一个UIView,用户可以在其中添加提醒,如果他想:

Stackview with reminderview below

stackview包含一定数量的子视图。在构建用户界面时我不知道这个数量,而是在运行时以编程方式添加所有子视图。 我希望提醒视图始终位于我的stackview下方。所以我添加了Top Space约束。

Top Space Constraint

但是,在以编程方式向堆栈视图添加项目(并因此扩大)时,此约束似乎没有任何影响。

view overlapping stackview this is how it should look

编辑: 这是我添加子视图的代码:

[_todoContainer.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
    int y = 0;
    for (NoteTodoEntity* entity in _note.todos) {
        NotinaryTodoView* view = [[[NSBundle mainBundle] loadNibNamed:@"NotinaryTodoView" owner:self options:nil] objectAtIndex:0];
        view.frame = CGRectMake(_todoContainer.frame.origin.x, y, _todoContainer.frame.size.width, 40);
        [view layoutIfNeeded];
        y+=40;
        view.currentEntity = entity;
        [view.todoDeleteButton addTarget:self action:@selector(todoActionPressed:) forControlEvents:UIControlEventTouchUpInside];
        [_todoContainer addSubview:view];
    }
    [self.view layoutIfNeeded];

1 个答案:

答案 0 :(得分:1)

解决方案非常简单。 为我的编程添加视图设置框架是错误的,而我必须使用约束和StackView的“addArrangedSubView”方法:

for (NoteTodoEntity* entity in _note.todos) {
        NotinaryTodoView* view = [[[NSBundle mainBundle] loadNibNamed:@"NotinaryTodoView" owner:self options:nil] objectAtIndex:0];
         [view.heightAnchor constraintEqualToConstant:40].active = true;
        [view.widthAnchor constraintEqualToConstant:self.view.frame.size.width].active = true;
        view.currentEntity = entity;
        [view.todoDeleteButton addTarget:self action:@selector(todoActionPressed:) forControlEvents:UIControlEventTouchUpInside];
        [_todoContainer addArrangedSubview:view];
    }