- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
到目前为止,我已经使用 Storyboard来开发我的 UI。现在,我需要以编程方式配置一些 UI 元素。例如圆边,..
我可以将此 UI 代码放在 viewDidLoad 中,但这不是正确的解决方案。关于 MVC 概念, Controller 必须与 View 分离。
那么我应该把所有的 UI 代码放在哪里呢?什么是最佳做法?
最佳答案
大多数时候,您会将 UI 代码放在 viewDidLayoutSubviews
方法中,因为它发生在 AutoLayout 对元素进行排序并将它们正确排列在 View 上之后。例如,如果您在 Storyboard 中使用约束,viewDidLoad
中的某些代码将无法正常工作。 ViewDidLoad
在 AutoLayout
发挥其魔力之前运行,因此如果您在代码中使用这些值,您的所有高度和宽度都会被弄乱。
viewDidLayoutSubviews
在 AutoLayout 之后运行,因此最好将它放在那里,除非您从不使用可能受 AutoLayout 影响的帧值。但是,将它放在 viewDidLayoutSubviews
中仍然是一个很好的做法。但正如您所知,此方法在某些操作上会运行多次,例如,只需点击 UITextField
就会使其再次运行。这成为一个问题,因为它不利于性能并且可能运行不必要的代码。例如,您可能想要在文本框下方添加特殊边框。为此,您可以创建一个新层并使用其高度和宽度将其添加到文本框。由于它使用框架属性,它不会在 viewDidLoad
中工作,因为 AutoLayout 尚未设置高度和宽度。这意味着您必须将它放在 viewDidLayoutSubviews 中,它会在点击 textField 后继续被调用,实质上是添加无限数量的边框。
要解决此性能问题,实际上最好创建一个 UI 元素的子类,并在 override drawRect
方法中进行设置。您可以在那里访问对象的所有属性,并且很容易设置任何您想要的。然后在 Storyboard Identity Inspector 中,将元素的类更改为您的子类。这将允许 Xcode 仅在创建元素时和自动布局完成后自动执行所有操作,使其成为自定义 UI 的最佳方式。
最后,还有一种自定义元素的方法。在 Identity Inspector 中,如果您转到用户定义的运行时属性,您可以轻松地添加属性并在那里编辑值。只需要添加一个Key Path(属性名),然后指定它是什么类型的值,添加进去即可!这很容易做到,但是对于一些更复杂的属性,直接用代码来做会更容易。
请参见下图,了解您可以在何处指定子类并添加运行时属性。
关于swift - 我应该把 UI 代码放在 Swift 的什么地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28283385/
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
操作无法完成。 Places API 库中发生内部错误。如果您认为此错误代表错误,请使用我们社区和支持页面 (https://developers.google.com/places/support)
我正在尝试在我的项目中使用 google places,我将其设置在 fragment 中而不是 Activity 中,我的自动完成 fragment 在 fragment 中。但是,当我尝试搜索它时
我的目的是使用R来查询google api。 我有一个地址和名称列表(属于商店、餐馆等),我需要为每个地址和名称存储: “纬度”、“经度”、“业务类型” 我的想法是使用 google place ap
我正在寻找设置一个自动完成的谷歌地方小部件。 我有一个带有“searchFieldText”id 的输入类型文本。 这是我的 JS 代码: var inputsec = document.getEle
是否可以使用图形 API(或地址/ zip )按纬度/经度和半径获取地点?我在文档中的任何地方都看不到它 最佳答案 搜索 URL 的以下格式将返回某个位置附近的地点列表: https://graph.
我正在探索 Google API,主要是 Places API。由于对 Google Places API 的请求数限制为 100,000,因此我正在寻找方法来最大限度地减少发送到 API 的请求数。
伙计们,我在我的应用程序中有一个功能,可以使用 GetFiles 在特定目录中搜索特定文件。方法 System.IO.Directory.GetFiles(string path, string
我已经在 Laravel 5.3 上使用 where 查询成功创建了许多函数,但是这次发生了一些奇怪的事情。 public function show($id){ $artikel = Art
我正在为我的 iPhone 应用程序使用 Facebook 图形 API 来获取附近地点的列表,我使用带有一些参数的“搜索”请求。我得到的响应是一个包含以下信息的地点列表:“纬度”、“经度”、“名称”
我有一个 Android 应用程序,我在其中使用 Google map 显示附近的地方,如加油站、药店等。我正在使用 map 和地点 API。 https://maps.googleapis.com/
我是一名优秀的程序员,十分优秀!