我是swift的新手。您的帮助将非常感激。无边框的Swift文本框
我的应用程序中有两个文本框。我如何创建与下面的图片中给出的相同的UI。
我想在屏幕截图中给出的边框下方只有一个边框来创建文本区域。
https://www.dropbox.com/s/wlizis5zybsvnfz/File%202017-04-04%2C%201%2052%2024%20PM.jpeg?dl=0
我是swift的新手。您的帮助将非常感激。无边框的Swift文本框
我的应用程序中有两个文本框。我如何创建与下面的图片中给出的相同的UI。
我想在屏幕截图中给出的边框下方只有一个边框来创建文本区域。
https://www.dropbox.com/s/wlizis5zybsvnfz/File%202017-04-04%2C%201%2052%2024%20PM.jpeg?dl=0
@IBOutlet var textField: UITextField! {
didSet {
let border = CALayer()
let width: CGFloat = 1 // this manipulates the border's width
border.borderColor = UIColor.darkGray.cgColor
border.frame = CGRect(x: 0, y: textField.frame.size.height - width,
width: textField.frame.size.width, height: textField.frame.size.height)
border.borderWidth = width
textField.layer.addSublayer(border)
textField.layer.masksToBounds = true
}
}
创建的UITextField的一个子类,所以你可以不用必须重新实现绘图代码重复使用多个视图此组件。通过@IBDesignable
和@IBInspectable
公开各种属性,您可以控制故事板中的颜色和厚度。另外 - 通过覆盖layoutSubviews
实现“重绘”,这样如果您使用自动布局并且存在方向或基于约束的动画,边框将会调整。这一切都表示 - 实际上你的子类看起来是这样的:
import UIKit
class Field: UITextField {
private let border = CAShapeLayer()
@IBInspectable var color: UIColor = UIColor.blue {
didSet {
border.strokeColor = color.cgColor
}
}
@IBInspectable var thickness: CGFloat = 1.0 {
didSet {
border.lineWidth = thickness
}
}
override func draw(_ rect: CGRect) {
self.borderStyle = .none
let from = CGPoint(x: 0, y: rect.height)
let here = CGPoint(x: rect.width, y: rect.height)
let path = borderPath(start: from, end: here).cgPath
border.path = path
border.strokeColor = color.cgColor
border.lineWidth = thickness
border.fillColor = nil
layer.addSublayer(border)
}
override func layoutSubviews() {
super.layoutSubviews()
let from = CGPoint(x: 0, y: bounds.height)
let here = CGPoint(x: bounds.width, y: bounds.height)
border.path = borderPath(start: from, end: here).cgPath
}
private func borderPath(start: CGPoint, end: CGPoint) -> UIBezierPath {
let path = UIBezierPath()
path.move(to: start)
path.addLine(to: end)
return path
}
}
然后,当你添加一个文本字段,以便您的故事板 - 更新中的身份检查该类使用这个子类,Field
- 然后在属性检查器,可以设置颜色和厚度。
中的UITextField呼叫在底部添加边框以下功能:
func setTextFieldBorder(_ dimension: CGRect) -> CALayer {
let border = CALayer()
let width = CGFloat(2.0)
border.borderColor = UIColor.darkGray.cgColor
border.frame = CGRect(x: 0, y: dimension.size.height - width, width: dimension.size.width, height: dimension.size.height)
border.borderWidth = width
return border
}
如何设置的UITextField的边界在文本框下面的示例代码为:
txtDemo.layer.addSublayer(setTextFieldBorder(txtDemo.frame))
txtDemo.layer.masksToBounds = true
哪里txtDemo是的UITextField的IBOutlet中。
这对于IB来说非常简单,不要对textfield使用任何寄存器,并且在textfield下面添加一个标签,其宽度与textfield相同,高度为1或2 px,删除标签文本&最后最重要的是给背景颜色的标签(EX:灰色),多数民众赞成它....希望它可以帮助 –
http://stackoverflow.com/a/26801251/4475605 – Adrian