【发布时间】:2017-01-04 23:44:34
【问题描述】:
我正在尝试使用 Layout 扩展来制作此视图,我尝试了一点,但无法弄清楚。
这是我目前的代码:
import UIKit
import Material
class ViewController: UIViewController {
private var nameField: TextField!
private var emailField: ErrorTextField!
private var passwordField: TextField!
private let constant: CGFloat = 32
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = Color.indigo.base
prepareNameField()
preparePasswordField()
prepareResignResponderButton()
}
/// Prepares the resign responder button.
private func prepareResignResponderButton() {
let btn = FlatButton(title: "Login", titleColor: Color.white)
btn.addTarget(self, action: #selector(handleResignResponderButton(button:)), for: .touchUpInside)
view.layout(btn).width(100).height(constant).right(0).top(8 * constant).horizontally(left: constant, right: constant);
}
/// Handle the resign responder button.
@objc
internal func handleResignResponderButton(button: UIButton) {
nameField?.resignFirstResponder()
passwordField?.resignFirstResponder()
}
private func prepareNameField() {
nameField = TextField()
nameField.placeholderNormalColor = Color.indigo.lighten4
nameField.placeholderActiveColor = Color.white
nameField.dividerNormalColor = Color.indigo.lighten4
nameField.dividerActiveColor = Color.white
nameField.isClearIconButtonEnabled = true
nameField.textColor = Color.white
nameField.placeholder = "Username"
view.layout(nameField).top(4 * constant).horizontally(left: constant, right: constant)
}
private func preparePasswordField() {
passwordField = TextField()
passwordField.placeholderNormalColor = Color.indigo.lighten4
passwordField.placeholderActiveColor = Color.white
passwordField.dividerNormalColor = Color.indigo.lighten4
passwordField.dividerActiveColor = Color.white
passwordField.isClearIconButtonEnabled = true
passwordField.textColor = Color.white
passwordField.placeholder = "Password"
passwordField.clearButtonMode = .whileEditing
passwordField.isVisibilityIconButtonEnabled = true
// Setting the visibilityIconButton color.
passwordField.visibilityIconButton?.tintColor = Color.white.withAlphaComponent(passwordField.isSecureTextEntry ? 0.38 : 0.54)
view.layout(passwordField).top(6 * constant).horizontally(left: constant, right: constant)
}
}
我是 swift 新手,所以如果有人能解释我如何完成它,那就太好了。
【问题讨论】:
-
是否必须通过 Layout 扩展来完成,还是正常的 Swift 布局代码可以?
-
@Zhang 我正在查看此文档cosmicmind.com/material/layout 但如果它不可能或者你不知道它。这是在普通 Swift 布局代码中完成它的开始。
-
我不确定我是否同意作者“简单”的想法。似乎比普通的 iOS 自动布局代码更复杂,至少,你必须记住所有这些“边缘”、“垂直”、“水平”、“interimSpacing”等。我将在下面提供我将如何做的答案它使用普通的自动布局代码。
-
@Zhang 那太好了!
-
嘿,布局扩展适用于简单的用例,并且可以根据 API 知识进行扩展。例如,在左下角定位一些东西,就是 view.layout(button).bottomLeft()。我认为没有比这更容易的了。一旦你开始将多个视图组合在一起并相互影响,你要么需要使用 Layout API 的经验,要么使用 Grid API,要么使用 AutoLayout 或框架本身。在这里,您可以选择最适合您的方式。我的建议是始终了解实际情况,然后选择使用抽象层
标签: swift swift3 ios-autolayout cosmicmind