我有一个忘记密码的页面。它只有一个文本字段,要求用户填写他们的电子邮件地址。设计师只设计了带有顶部和底部边框的文本字段。 我想答案从这里UITextField Only Top And Bottom Border 但结果只显示文本字段底部边框。 使用swift 2只有顶部和底部边框的文本字段
像图像中我想创建一个顶部和一个灰色边框底部
我有一个忘记密码的页面。它只有一个文本字段,要求用户填写他们的电子邮件地址。设计师只设计了带有顶部和底部边框的文本字段。 我想答案从这里UITextField Only Top And Bottom Border 但结果只显示文本字段底部边框。 使用swift 2只有顶部和底部边框的文本字段
像图像中我想创建一个顶部和一个灰色边框底部
感谢@El船长提出了宝贵的意见和漂亮的答案被@Bjorn滚装即使是在Objective-C,我认为。 而我的回答是(我使用swift 2 Xcode 7)
在您的swift文件中覆盖函数viewDidLayoutSubviews()。和守则同样是
override func viewDidLayoutSubviews() {
// Creates the bottom border
let borderBottom = CALayer()
let borderWidth = CGFloat(2.0)
borderBottom.borderColor = UIColor.grayColor().CGColor
borderBottom.frame = CGRect(x: 0, y: forgotPasswordEmailText.frame.height - 1.0, width: forgotPasswordEmailText.frame.width , height: forgotPasswordEmailText.frame.height - 1.0)
borderBottom.borderWidth = borderWidth
forgotPasswordEmailText.layer.addSublayer(borderBottom)
forgotPasswordEmailText.layer.masksToBounds = true
// Creates the Top border
let borderTop = CALayer()
borderTop.borderColor = UIColor.grayColor().CGColor
borderTop.frame = CGRect(x: 0, y: 0, width: forgotPasswordEmailText.frame.width, height: 1)
borderTop.borderWidth = borderWidth
forgotPasswordEmailText.layer.addSublayer(borderTop)
forgotPasswordEmailText.layer.masksToBounds = true
}
forgotPasswordEmailText是输入电子邮件
文本字段right,i forgott iam在swift2标签...对不起:D刚刚看到链接的帖子,并正在适应它;) –
@BjörnRo我想创建另一个图层并添加它。但作为来自C#背景的开发人员,这是我对Xcode和Swift的第一个方法,我对此并不确定。 – Joker
好吧,祝你好运,有进一步的实施;) –
要能欣赏卸下战斗,你可以创建一个带有的tableView包含文本字段的静态电池。瞧做...顶部和底部边框免费的午餐,你会使用标准的苹果的东西:)
如果你真的想绘制层不是按照你的链接问题的步骤:
CALayer *topBorder = [CALayer layer];
topBorder.frame = CGRectMake(0, 0, self.frame.size.width, 1);
topBorder.backgroundColor = [UIColor blackColor].CGColor;
[myTextField.layer addSublayer:topBorder];
CALayer *bottomBorder = [CALayer layer];
bottomBorder.frame = CGRectMake(0, self.frame.size.height - 1, self.frame.size.width, 1);
bottomBorder.backgroundColor = [UIColor blackColor].CGColor;
[myTextField.layer addSublayer:bottomBorder];
在斯威夫特:
let topBorder = CALayer()
topBorder.frame = CGRectMake(0, 0, bounds.size.width, 1)
topBorder.backgroundColor = UIColor.grayColor()
textField.layer.addSublayer(topBorder)
let bottomBorder = CALayer()
bottomBorder.frame = CGRectMake(0, bounds.size.height-1, bounds.size.width, 1)
bottomBorder.backgroundColor = UIColor.grayColor()
textField.layer.addSublayer(bottomBorder)
为程序化的解决方案好建议公布为止。但我想我会分享的InterfaceBuilder的解决方案....
1)在您的视图控制器创建视图集合
@IBOutlet private var borderViews: [UIView]?
2)要在其中创建它们在Interface Builder 1px的高2个UIViews受限于周围的文本字段
3)通过使用的setValue forKeyPath界面生成器的2次连接到borderViews IBOutlet中
4)自定义的两个视图外观...例如,如果成功可能要边框变绿
setValue(UIColor.green, forKeyPath: "borderViews.backgroundColor")
在斯威夫特3使用扩展:
从任何地方
import UIKit
extension UITextField {
func setBottomBorder() {
self.borderStyle = .none
self.layer.backgroundColor = UIColor.white.cgColor
self.layer.masksToBounds = false
self.layer.shadowColor = UIColor.gray.cgColor
self.layer.shadowOffset = CGSize(width: 0.0, height: 1.0)
self.layer.shadowOpacity = 1.0
self.layer.shadowRadius = 0.0
}
}
调用Create斯威夫特文件:
PasswordField.setBottomBorder();
这里有一个处理意见调整,以及一个很好的和简单的雨燕4实施:)
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
viewToShadow.backgroundColor = .white
viewToShadow.layer.masksToBounds = false
viewToShadow.layer.sublayers?
.filter { layer -> Bool in
return layer.backgroundColor == UIColor.almostBlack.alpha(0.5).cgColor
}
.forEach { layer in
layer.removeFromSuperlayer()
}
[CGRect(x: 0.0, y: 0.0, width: viewToShadow.bounds.width, height: 0.5),
CGRect(x: 0.0, y: viewToShadow.bounds.height, width: viewToShadow.bounds.width, height: 0.5)]
.forEach { frame in
let layer = CALayer()
layer.frame = frame
layer.backgroundColor = UIColor.almostBlack.alpha(0.5).cgColor
viewToShadow.layer.addSublayer(layer)
}
}
是...的上边框再拍层,并设置帧'CGRectMake(0,0,self.frame.size .width,1)' –