如何添加不会破坏且不受AutoLayout影响的半透明背景的子视图?

Posted

技术标签:

【中文标题】如何添加不会破坏且不受AutoLayout影响的半透明背景的子视图?【英文标题】:How to add subview with half-transparent background which won't break and won't be affected by AutoLayout? 【发布时间】:2017-06-18 09:01:04 【问题描述】:

我想向用户展示应用程序正在使用一些进度条和视图顶部的标签来加载数据,这将在加载数据后显示。此视图不是初始视图,因此我无法将 LaunchScreen 用于这些目的。最好的方法是什么?

后面要显示的视图使用AutoLayout,最好是最上面的视图也使用AutoLayout,但是这些AutoLayout之间不应该有任何交互。

【问题讨论】:

【参考方案1】:

首先创建一个自定义的 UIView 类,并根据您的要求自定义视图。即透明背景,使用自动布局/在代码的帮助下添加图像/标签等。

现在将这个自定义视图 (yourSubView) 添加到它的容器视图中并添加一些约束,使其放置在正确的位置。

以下代码将在所有边(左、右、上、下)保持80px空间后添加一个子视图,您可以根据需要添加约束。

    [yourContainerView addSubview:yourSubView];
    yourSubView.translatesAutoresizingMaskIntoConstraints =
    NO;

    [yourContainerView addConstraint:[NSLayoutConstraint constraintWithItem:yourSubView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:yourContainerView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:80.0]];
    [yourContainerView addConstraint:[NSLayoutConstraint constraintWithItem:yourSubView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:yourContainerView attribute:NSLayoutAttributeRight multiplier:1.0 constant:80.0]];
    [yourContainerView addConstraint:[NSLayoutConstraint constraintWithItem:yourSubView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:yourContainerView attribute:NSLayoutAttributeTop multiplier:1.0 constant:80.0]];
    [yourContainerView addConstraint:[NSLayoutConstraint constraintWithItem:yourSubView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:yourContainerView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:80.0]];

【讨论】:

【参考方案2】:

使用https://github.com/sgryschuk/SGNavigationProgress 之类的东西怎么样?

【讨论】:

以上是关于如何添加不会破坏且不受AutoLayout影响的半透明背景的子视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UINavigationBar 下方绘制主视图,以便当栏显示/隐藏时,视图不受影响?

如何设置 CALayer 的阴影会破坏 AutoLayout 约束?

使用 innerHtml 添加的元素不受 Javascript 库影响

一文彻底搞懂前端沙箱

为啥 javafx 会破坏我的半透明游标?

如何为视图提供固定位置,使其不受 SwiftUI 中滚动的影响