gpt4 book ai didi

swift - 我应该把 UI 代码放在 Swift 的什么地方?

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

到目前为止,我已经使用 Storyboard来开发我的 UI。现在,我需要以编程方式配置一些 UI 元素。例如圆边,..

我可以将此 UI 代码放在 viewDidLoad 中,但这不是正确的解决方案。关于 MVC 概念, Controller 必须与 View 分离。

那么我应该把所有的 UI 代码放在哪里呢?什么是最佳做法?

最佳答案

大多数时候,您会将 UI 代码放在 viewDidLayoutSubviews 方法中,因为它发生在 AutoLayout 对元素进行排序并将它们正确排列在 View 上之后。例如,如果您在 Storyboard 中使用约束,viewDidLoad 中的某些代码将无法正常工作。 ViewDidLoadAutoLayout 发挥其魔力之前运行,因此如果您在代码中使用这些值,您的所有高度和宽度都会被弄乱。

viewDidLayoutSubviews 在 AutoLayout 之后运行,因此最好将它放在那里,除非您从不使用可能受 AutoLayout 影响的帧值。但是,将它放在 viewDidLayoutSubviews 中仍然是一个很好的做法。但正如您所知,此方法在某些操作上会运行多次,例如,只需点击 UITextField 就会使其再次运行。这成为一个问题,因为它不利于性能并且可能运行不必要的代码。例如,您可能想要在文本框下方添加特殊边框。为此,您可以创建一个新层并使用其高度和宽度将其添加到文本框。由于它使用框架属性,它不会在 viewDidLoad 中工作,因为 AutoLayout 尚未设置高度和宽度。这意味着您必须将它放在 viewDidLayoutSubviews 中,它会在点击 textField 后继续被调用,实质上是添加无限数量的边框。

要解决此性能问题,实际上最好创建一个 UI 元素的子类,并在 override drawRect 方法中进行设置。您可以在那里访问对象的所有属性,并且很容易设置任何您想要的。然后在 Storyboard Identity Inspector 中,将元素的类更改为您的子类。这将允许 Xcode 仅在创建元素时和自动布局完成后自动执行所有操作,使其成为自定义 UI 的最佳方式。

最后,还有一种自定义元素的方法。在 Identity Inspector 中,如果您转到用户定义的运行时属性,您可以轻松地添加属性并在那里编辑值。只需要添加一个Key Path(属性名),然后指定它是什么类型的值,添加进去即可!这很容易做到,但是对于一些更复杂的属性,直接用代码来做会更容易。

请参见下图,了解您可以在何处指定子类并添加运行时属性。

Customizing in Storyboard

关于swift - 我应该把 UI 代码放在 Swift 的什么地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28283385/

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