gpt4 book ai didi

ios - 在运行时快速更改类

转载 作者:行者123 更新时间:2023-11-29 02:48:19 24 4
gpt4 key购买 nike

所以我在界面生成器(XCode 6)中设置了 3 个 View 。它们链接到拥有它们的ViewController。另外,我的项目中有 3 个 UIVIew 子类。在运行时,我需要将其中一个 View 的类从 UIView 更改为我的自定义 View 子类。

我如何在 swift 中执行此操作? (我需要在 IB 中设置的所有 autolayout 才能在更改后正常工作)。

最佳答案

要实现您的需要,您可以在 IB 中创建一个 View ,然后在代码中添加所需的 View 作为 subview 。

要使添加的 View 占据所有容器 View 空间,您需要更新 subview 的框架或设置自动布局约束。每次容器 View 更改其大小时,都需要重复带有框架的变体。代码如下:

自动布局约束

override func viewDidLoad() {
super.viewDidLoad()

self.myView = UIView(frame: CGRect())
self.myView.setTranslatesAutoresizingMaskIntoConstraints(false)
self.myViewContainer.addSubview(self.myView)

self.myViewContainer.addConstraint(NSLayoutConstraint(item: self.myView, attribute: .Top, relatedBy: .Equal, toItem: self.myViewContainer, attribute: .Top, multiplier: 1.0, constant: 0))
self.myViewContainer.addConstraint(NSLayoutConstraint(item: self.myView, attribute: .Right, relatedBy: .Equal, toItem: self.myViewContainer, attribute: .Right, multiplier: 1.0, constant: 0))
self.myViewContainer.addConstraint(NSLayoutConstraint(item: self.myView, attribute: .Bottom, relatedBy: .Equal, toItem: self.myViewContainer, attribute: .Bottom, multiplier: 1.0, constant: 0))
self.myViewContainer.addConstraint(NSLayoutConstraint(item: self.myView, attribute: .Left, relatedBy: .Equal, toItem: self.myViewContainer, attribute: .Left, multiplier: 1.0, constant: 0))
}

手动帧更新

@IBOutlet var myViewContainer: UIView
var myView: UIView!

override func viewDidLoad() {
super.viewDidLoad()

self.myView = UIView(frame: CGRect())
self.myViewContainer.addSubview(self.myView)
}

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

self.myView.frame = self.myViewContainer.bounds
}

即使容器 View 具有自动布局约束,也可以完成框架更新。

关于ios - 在运行时快速更改类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24840304/

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