gpt4 book ai didi

ios - 用另一个 UIView 替换 UIView,保持约束

转载 作者:行者123 更新时间:2023-11-28 07:20:59 25 4
gpt4 key购买 nike

我的 View 可以处于几种状态,比方说 .enabled.disabled。禁用和启用的 View 完全不同,除了它们的内容位于屏幕中心这一事实。

在运行时,条件可能会改变, View 应该相应地更新,换句话说,我可能想删除禁用的 View ,并添加启用的 View 。

是否可以在不添加新约束的情况下更新 subview ?

我已经使用 containerView 解决了这个问题;

private var containerView: UIView = {
let containerView = UIView()
containerView.translatesAutoresizingMaskIntoConstraints = false

return containerView
}()

我以老式的方式添加到 View 中

addSubview(containerView)

设置约束;

NSLayoutConstraint.activate([
containerView.centerYAnchor.constraint(equalTo: .centerYAnchor)
containerView.leadingAnchor.constraint(equalTo: .leadingAnchor),
containerView.trailingAnchor.constraint(equalTo: .trailingAnchor)
])

然后当我想切换 View 时,我会做类似的事情;

    var state: ViewState? {
didSet {
guard let state = state else { return }

// Remove previously added view
containerView.subviews.forEach({ $0.removeFromSuperview() })

var contentView: UIView

switch state {
case .disabled:
contentView = disabledView
case .enabled:
contentView = enabledView
}

containerView.addSubview(contentView)

NSLayoutConstraint.activate([
contentView.topAnchor.constraint(equalTo: containerView.topAnchor),
contentView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
contentView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
contentView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
])
}
}

所以我需要保持事件的中心约束将在 containerView 上,并且永远不会被删除。

有没有更简洁的方法来实现这个结果?或者您看到这种方法有任何直接问题吗?

最佳答案

您应该使用容器 View 。在中心保持容器 View 并根据您的状态更新 subview 。您的中心 View 约束将保持不变。仅 subview 将隐藏/显示

这里是查看更多关于容器 View 的引用链接: https://medium.com/@dushyant_db/setting-up-a-container-view-using-interface-builder-and-via-code-7ac1a7f0a0d6

关于ios - 用另一个 UIView 替换 UIView,保持约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58084802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com