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

Posted

技术标签:

【中文标题】具有顶部空间的 UIView 对 UIStackView 的约束未显示在 Stackview 下方【英文标题】:UIView with top space Constraint to UIStackView not displayed below Stackview 【发布时间】:2015-10-30 10:57:47 【问题描述】:

我的问题有点难以描述:

我正在开发一个笔记应用程序。我的“创建新笔记” - 屏幕包含一个垂直堆栈视图,用于显示与新笔记关联的待办事项。 在这个 stackview 下方有一个 UIView,如果用户愿意,可以在其中添加提醒:

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

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

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

[_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];

【问题讨论】:

显示添加子视图的代码 @Wain 我编辑了我原来的问题 在循环之后尝试[self.view layoutIfNeeded],让整个视图有机会更新 @Wain 我添加了 [self.view layoutIfNeeded];不幸的是,它没有帮助(我再次编辑了问题以反映更改) 它是唯一有问题的视图,它下面的视图还可以吗?他们被固定在什么地方?将该视图也添加到堆栈视图中... 【参考方案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];
    

【讨论】:

以上是关于具有顶部空间的 UIView 对 UIStackView 的约束未显示在 Stackview 下方的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有透明顶部 UIView 的同时忽略下面的一个 UIView - iOS CocoaTouch

如何为具有约束的 UIView 设置动画?

UIView 位于半透明导航栏后面,具有实用创建的视图约束

在顶部显示 UIView(对话框)时,iOS 对后面视图的模糊效果 [重复]

是否有可能有一个可变高度的 UIView 蒙版层不拉伸,也许只是坐在顶部? (例如,“撕纸”式边缘?)

使用自动布局调整同级视图的大小时,使用子视图重新定位 UIView 不起作用