Swift 文本字段边框宽度不正确
Swift text field border isn't the right width
我在按照答案 here 后生成了一个底部边框。
除了边框宽度不正确外,这绝对有效。它设置了约束以匹配其下方按钮的宽度,但正如您所看到的,即将变短。
我错过了什么?
代码:
extension UITextField
{
func setBottomBorder(withColor color: UIColor)
{
self.borderStyle = UITextBorderStyle.none
self.backgroundColor = UIColor.clear
let width: CGFloat = 3.0
let borderLine = UIView(frame: CGRect(x: 0, y: self.frame.height - width, width: self.frame.width, height: width))
borderLine.backgroundColor = color
self.addSubview(borderLine)
}
}
然后在 VC 中:
override func viewDidLoad() {
authorNameOutlet.setBottomBorder(withColor: UIColor.lightGray)
}
然后 Xcode 显示...
但是模拟器显示...
我试过将文本字段的宽度设置为 0.7 x 超级视图宽度(与其下方的按钮相同)并将文本字段的宽度设置为与按钮宽度相等但是都不起作用。
这是因为自动布局。
您可以将 autoresizingMask
添加到您的行中。
borderLine.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
您正在使用边框线视图的静态框架。在 viewDidLoad
之后,您的视图控制器的视图会调整大小。
选项 1:(又快又脏)
将您的代码从 viewDidLoad()
移至 viewWillAppear(_ animated: Bool)
。 viewWillAppear
在视图控制器视图的第一个布局之后被调用
选项 2:
为您的边界线视图添加约束。这样您的边框线视图将自动调整大小。
重要提示:
不要忘记覆盖中的超级调用,否则你会遇到奇怪的错误!
例如:
override func viewDidLoad() {
super.viewDidLoad()
// your code
}
我在按照答案 here 后生成了一个底部边框。
除了边框宽度不正确外,这绝对有效。它设置了约束以匹配其下方按钮的宽度,但正如您所看到的,即将变短。
我错过了什么?
代码:
extension UITextField
{
func setBottomBorder(withColor color: UIColor)
{
self.borderStyle = UITextBorderStyle.none
self.backgroundColor = UIColor.clear
let width: CGFloat = 3.0
let borderLine = UIView(frame: CGRect(x: 0, y: self.frame.height - width, width: self.frame.width, height: width))
borderLine.backgroundColor = color
self.addSubview(borderLine)
}
}
然后在 VC 中:
override func viewDidLoad() {
authorNameOutlet.setBottomBorder(withColor: UIColor.lightGray)
}
然后 Xcode 显示...
但是模拟器显示...
我试过将文本字段的宽度设置为 0.7 x 超级视图宽度(与其下方的按钮相同)并将文本字段的宽度设置为与按钮宽度相等但是都不起作用。
这是因为自动布局。
您可以将 autoresizingMask
添加到您的行中。
borderLine.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
您正在使用边框线视图的静态框架。在 viewDidLoad
之后,您的视图控制器的视图会调整大小。
选项 1:(又快又脏)
将您的代码从 viewDidLoad()
移至 viewWillAppear(_ animated: Bool)
。 viewWillAppear
在视图控制器视图的第一个布局之后被调用
选项 2:
为您的边界线视图添加约束。这样您的边框线视图将自动调整大小。
重要提示:
不要忘记覆盖中的超级调用,否则你会遇到奇怪的错误!
例如:
override func viewDidLoad() {
super.viewDidLoad()
// your code
}