在 viewDidLoad 中添加子视图有奇怪的行为 [重复]
Posted
技术标签:
【中文标题】在 viewDidLoad 中添加子视图有奇怪的行为 [重复]【英文标题】:Adding subview in viewDidLoad has strange bahavior [duplicate] 【发布时间】:2020-04-22 12:12:35 【问题描述】:我在下面的viewDidload()
方法中手动创建greenView
并将其添加到miidLeView
,但它在生成的屏幕中的坐标是错误的?这是什么原因?应该在哪里添加到middleView
?谢谢。
class ViewController: UIViewController
@IBOutlet weak var redView: UIView!
var greenRegion : UIView!
let greenRegionHeight : CGFloat = 100.0
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
greenRegion = UIView(frame: CGRect(x: redView.bounds.size.width*1/8,
y: redView.bounds.size.height/2 - greenRegionHeight/2,
width: redView.bounds.size.width*3/4,
height: greenRegionHeight))
greenRegion.backgroundColor = UIColor.green
redView.addSubview(greenRegion)
【问题讨论】:
这里的middleView
是什么?
你的预期输出是什么?
middleView 是红色的。 greenView 应该在红色(中间)视图内垂直和水平居中。
你的greenRegion
的宽度应该是多少,应该是动态的redView.bounds.size.width*3/4
?
programmingios.net/premature-layout
【参考方案1】:
您只需将frame
设置相关代码放入viewDidLayoutSubviews
方法中,然后一切都按预期工作。
override func viewDidLayoutSubviews()
greenRegion = UIView(frame: CGRect(x: redView.bounds.size.width*1/8,
y: redView.bounds.size.height/2 - greenRegionHeight/2,
width: redView.bounds.size.width*3/4,
height: greenRegionHeight))
输出:
【讨论】:
是的,当您在 ViewDidAppear() 中执行此操作时它也可以工作,但有什么问题。这种行为伴随着新的 xcode 更新。 与 XCode 更新无关。您正在尝试在 UI 中设置的所有视图定位之前添加视图。它正在工作的另一件事是 ViewDidAppear,它在 viewDidLoad 方法中不起作用。如果您要使用自动布局,那么它也可以在 viewDidLoad 方法中使用。希望它会帮助你。另一种解决方案是设置帧有一些延迟。您可以将其视为特定于操作系统的问题而不是特定于 XCode 的问题以上是关于在 viewDidLoad 中添加子视图有奇怪的行为 [重复]的主要内容,如果未能解决你的问题,请参考以下文章