我构建了一个静态表格 View ,其行数比屏幕多,因此用户必须滚动才能查看所有单元格。
每个单元格都有一个带有以下类的文本字段来添加底部边框:
class TextFieldWithBottomBorder: UITextField {
let border = CALayer()
let width = CGFloat(1.0)
func addBottomBorder(color: UIColor){
self.border.borderColor = color.cgColor
self.border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height:self.frame.size.height)
self.border.borderWidth = self.width
self.layer.addSublayer(self.border)
self.layer.masksToBounds = true
}
func changeBorderColor(color: UIColor){
self.border.borderColor = color.cgColor
}
}
我在从服务器 e 接收到一些数据后调用该方法。 G。
self.firstnameTextField.text = firstNameFromDB
self.firstnameTextField.addBottomBorder(color: .blue)
这适用于当前显示的每个单元格。但是当前 View 之外的单元格比文本字段短。
看这个截图,对于“Vorname”,意味着 firstName 一切看起来都不错,但是对于电子邮件、密码等,边框很短。
http://share-your-photo.com/34b5e80253
最佳答案
看起来 UITextField 的大小在您调用 addBottomBorder 后正在调整大小,因此该行使用的 UIView 现在不够宽。很难说为什么在没有看到更多代码的情况下会出现这种情况,但是您可以使用几种方法来克服它。
1)切换到 UIView 而不是 CALayer 并使用自动布局将 View 保持在更正位置。
2)覆盖layoutSubviews,更新底线的frame。
对您来说最简单的可能是选项 2(尽管我会选择选项 1),它看起来像这样:
override func layoutSubviews() {
super.layoutSubviews()
self.border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height:self.frame.size.height)
}
现在,每当文本字段的框架/大小发生变化时,边框线 CALayer 的框架/大小都会相应更新。
关于ios - TableView中Swift TextField的底部边框宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44385229/