gpt4 book ai didi

swift - 带填充、顶部垂直对齐、多行占位符文本的自定义文本字段

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

enter image description here

我想制作具有左、右、下、上填充的自定义文本字段。所以我使用下面的代码来实现这一点:

class CustomTextField: UITextField {

let padding = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8);

override func textRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: padding)
}

override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: padding)
}

override func editingRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: padding)
} }

我还想让占位符文本对齐在 TF 的顶部而不是中心。我使用下面的代码:

 textField.contentVerticalAlignment = .top

但是,当我尝试使用填充设置垂直对齐时,对齐不起作用。当我移除填充物时,它才会起作用。我在这里的意思是,它只能工作其中之一。我怎样才能同时实现这两个目标?另外,是否可以显示多行占位符文本,而不是将其显示在一行中并在末尾添加点?

最佳答案

您需要重写placeholderRect(forBounds:),如下所示

override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
var placeholderPadding = self.padding
placeholderPadding.top = 0

var rect = bounds.inset(by: placeholderPadding)

// We need to adjust placeholder in-case there is a leftView or rightView
if rightViewMode == .always || rightViewMode == .unlessEditing, let rightViewWidth = self.rightView?.frame.width {
rect.size.width -= rightViewWidth
}

if leftViewMode == .always || leftViewMode == .unlessEditing, let leftViewWidth = self.leftView?.frame.width {
rect.size.width -= leftViewWidth
}

return rect
}

问题 2:UITextField 仅适用于 1 行,您需要查看 UITextView 来了解这一点

关于swift - 带填充、顶部垂直对齐、多行占位符文本的自定义文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55466820/

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