iOS: 如何防止 UITextField 离开屏幕
iOS: How can I prevent a UITextField from going off screen
我目前正在开发一个应用程序,它在 Vertical StackView 中有两个 UILabel,在 Vertical StackView 中有两个 UITextField,在一个 Horizontal StackView 中有两个 Vertical StackView:
我设置了限制条件。当应用程序在更大的设备(例如 iPhone 11)上运行时,它看起来很完美,如您所见:
但是如果我切换到像 iPhone 8 这样的较小设备,您可以看到线条紧贴 phone 的边缘:
我为 TextField 添加下划线的方法是使用我创建的名为 StyledTextField 的 class。它看起来像这样:
class StyledTextField: UITextField {
var bottomLine = CALayer()
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
styleTextField()
}
private func styleTextField() {
font = UIFont(name: "Quicksand", size: UIFont.labelFontSize)
// Create the bottom line
bottomLine.frame = CGRect(x: 0, y: frame.height - 2, width: frame.width, height: 2)
bottomLine.backgroundColor = Environment.Colours.primary.cgColor
// Remove border on text field
borderStyle = .none
// Add the line to the text field
layer.addSublayer(bottomLine)
}
func makeUnderlineLight() {
bottomLine.backgroundColor = Environment.Colours.primaryAssisted.cgColor
}
}
在 Storyboard 中,我将 UITextField class 指定为“StyledTextField”的那个。
此外,在处理 UITextFields 的控制器上的 viewDidLoad
函数中,我调用 setUpUI()
函数执行以下操作:
func setUpUI() {
title = "Add Task"
taskNameTextField.attributedPlaceholder = NSAttributedString(string: "Name", attributes: [NSAttributedString.Key.foregroundColor: Environment.Colours.lightGray])
moreInfoTextField.attributedPlaceholder = NSAttributedString(string: "(Optional)", attributes: [NSAttributedString.Key.foregroundColor: Environment.Colours.lightGray])
setUpDatePicker()
moreInfoTextField.makeUnderlineLight()
if isEditing() {
showTaskToEdit()
}
view.backgroundColor = Environment.Colours.secondary
}
如您所见,我在其中调用了 makeUnderlineLight()
StyledTextField 函数。
谢谢!
select 您的“更多信息:”标签并将水平压缩阻力优先级设置为 1000
无法在此处找到:
简单two-step解决方案:
重写 styleTextField
以便它保留对下划线层的引用,并且 删除 下划线层(如果它已经存在),然后再创建一个新的下划线层一.
将 styleTextField()
的通话移至 layoutSubviews
。 (别忘了拨打 super
。)
我目前正在开发一个应用程序,它在 Vertical StackView 中有两个 UILabel,在 Vertical StackView 中有两个 UITextField,在一个 Horizontal StackView 中有两个 Vertical StackView:
我设置了限制条件。当应用程序在更大的设备(例如 iPhone 11)上运行时,它看起来很完美,如您所见:
但是如果我切换到像 iPhone 8 这样的较小设备,您可以看到线条紧贴 phone 的边缘:
我为 TextField 添加下划线的方法是使用我创建的名为 StyledTextField 的 class。它看起来像这样:
class StyledTextField: UITextField {
var bottomLine = CALayer()
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
styleTextField()
}
private func styleTextField() {
font = UIFont(name: "Quicksand", size: UIFont.labelFontSize)
// Create the bottom line
bottomLine.frame = CGRect(x: 0, y: frame.height - 2, width: frame.width, height: 2)
bottomLine.backgroundColor = Environment.Colours.primary.cgColor
// Remove border on text field
borderStyle = .none
// Add the line to the text field
layer.addSublayer(bottomLine)
}
func makeUnderlineLight() {
bottomLine.backgroundColor = Environment.Colours.primaryAssisted.cgColor
}
}
在 Storyboard 中,我将 UITextField class 指定为“StyledTextField”的那个。
此外,在处理 UITextFields 的控制器上的 viewDidLoad
函数中,我调用 setUpUI()
函数执行以下操作:
func setUpUI() {
title = "Add Task"
taskNameTextField.attributedPlaceholder = NSAttributedString(string: "Name", attributes: [NSAttributedString.Key.foregroundColor: Environment.Colours.lightGray])
moreInfoTextField.attributedPlaceholder = NSAttributedString(string: "(Optional)", attributes: [NSAttributedString.Key.foregroundColor: Environment.Colours.lightGray])
setUpDatePicker()
moreInfoTextField.makeUnderlineLight()
if isEditing() {
showTaskToEdit()
}
view.backgroundColor = Environment.Colours.secondary
}
如您所见,我在其中调用了 makeUnderlineLight()
StyledTextField 函数。
谢谢!
select 您的“更多信息:”标签并将水平压缩阻力优先级设置为 1000
无法在此处找到:
简单two-step解决方案:
重写
styleTextField
以便它保留对下划线层的引用,并且 删除 下划线层(如果它已经存在),然后再创建一个新的下划线层一.将
styleTextField()
的通话移至layoutSubviews
。 (别忘了拨打super
。)