ios - TableView中Swift TextField的底部边框宽度

标签 ios swift tableview border textfield

我构建了一个静态表格 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/

相关文章:

ios - 我可以在 iOS 中确定应用程序是从待机状态还是从多任务处理恢复

ios - [ViewController PresentPopupViewController :animationType:]: unrecognized selector

swift - 透明 View Controller 仍然显示天哪图像

ios - 从另一个 View Controller swift 设置 UILabel

ios tableview 表中的最后一个单元格缺少分隔符 swift

swift - TableView 到 TableView 协议(protocol)委托(delegate)

ios - GCDAsyncSocket readDataWithTimeout 没有继续读取数据

ios - 自定义 UITableViewCell 中的按钮操作会影响其他单元格

Swift OS X NSTouch 阶段 rawInput 到字符串?

ios - Swift 3 Table View - 从某些单元格中删除堆栈 View