自动布局子视图在 Swift 4 中添加问题
Posted
技术标签:
【中文标题】自动布局子视图在 Swift 4 中添加问题【英文标题】:Autolayout subview add issue in Swift 4 【发布时间】:2017-12-11 07:20:49 【问题描述】:我正在尝试将子视图添加到全屏父视图中,但它没有显示在全屏父视图中。如果我不初始化或不将其设置在框架内,则不会显示
【问题讨论】:
【参考方案1】:试试这个 你会发现一些有用的东西 只需添加此 UIView 扩展程序
extension UIView
func fillInSuperView(inset:UIEdgeInsets = UIEdgeInsets.zero)
self.translatesAutoresizingMaskIntoConstraints = false
self.leadingAnchor.constraint(equalTo: (self.superview?.leadingAnchor)!, constant: inset.left).isActive = true;
self.trailingAnchor.constraint(equalTo: (self.superview?.trailingAnchor)!, constant: -inset.right).isActive = true
self.topAnchor.constraint(equalTo: (self.superview?.topAnchor)!, constant: inset.top).isActive = true
self.bottomAnchor.constraint(equalTo: (self.superview?.bottomAnchor)!, constant: -inset.bottom).isActive = true
调用这个函数
YourView.fillInSuperView(inset: UIEdgeInsets.zero)
您可以通过设置 insets 从 superView 设置填充
【讨论】:
【参考方案2】:将 v1 框架布局更改为全屏布局。高度和宽度将是全屏高度和宽度。您可以使用此更新帧大小
let v1 = UIView(frame: CGRect(x:0, y:0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
通过使用它不需要使用Autolayout
约束。
【讨论】:
你不明白我的问题,对不起。我的问题是为什么子视图不显示带有约束的全屏父视图【参考方案3】:改变 v1 宽度和高度 到父宽度和高度 喜欢
let v1 = UIView(frame: CGRect(x:0, y:0, width: view.bounds.size.width, height: view.bounds.size.height))
这可能有效
【讨论】:
我认为自动布局应该使用约束自动更新宽度高度,如果我需要设置宽度、高度,那么这里的自动布局是什么意思?【参考方案4】:您的错误是您为 v1 指定了固定宽度和高度
i.e. let v1 = UIView(frame: CGRect(x:0, y:0, width: 100, height: 50))
试试这个
let v1 = UIView()
// this will take frame(x, y, width, height) from superview
v1.frame = view.frame
【讨论】:
没有这个,与视图无关,无论你设置什么尺寸,自动布局仍然应用约束 嗯,但是这个新的 v1 视图将像它的父视图一样抓取相同的帧,并且会适合。 试试这个 v1.frame = view.bounds (这里的视图是你的超级视图) 想要的是当超级视图发生变化时,子视图也会自动布局约束,你为 v1 设置的框架并不重要【参考方案5】:使用此功能将 v1 帧大小更改为全视图
let v1 = UIView(frame: UIScreen.main.bounds)
这会起作用。
【讨论】:
我不想要,只是想要 v1 全屏 superview 当 superview 调整大小,而不是全屏【参考方案6】:试试这个,
let v1 = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
v1.backgroundColor = UIColor.gray
v1.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(v1)
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v1]|", options: [], metrics: nil, views: ["v1" : v1]))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[v1]|", options: [], metrics: nil, views: ["v1" : v1]))
【讨论】:
这个产品在操场上效果一样。 你在操场上工作吗?我为 ios 添加了这段代码,你可以在模拟器和设备的 UI 中看到这段代码的效果。 我只是告诉你你添加的约束和新的锚约束效果相同,是的,我在操场上测试过, 那么您还有其他问题。因为我已经在 iOS 模拟器中测试过了,它运行良好。以上是关于自动布局子视图在 Swift 4 中添加问题的主要内容,如果未能解决你的问题,请参考以下文章
我的带有自动布局约束的 Swift 4 UIScrollView 没有滚动