2015-10-06 61 views
1

我有一个忘记密码的页面。它只有一个文本字段,要求用户填写他们的电子邮件地址。设计师只设计了带有顶部和底部边框的文本字段。 我想答案从这里UITextField Only Top And Bottom Border 但结果只显示文本字段底部边框。 enter image description here使用swift 2只有顶部和底部边框的文本字段

像图像中我想创建一个顶部和一个灰色边框底部

+1

是...的上边框再拍层,并设置帧'CGRectMake(0,0,self.frame.size .width,1)' –

回答

1

感谢@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是输入电子邮件

文本字段

最终输出看起来像这样:用灰色边框(iPhone 4S模拟器的屏幕截图)enter image description here

+0

right,i forgott iam在swift2标签...对不起:D刚刚看到链接的帖子,并正在适应它;) –

+0

@BjörnRo我想创建另一个图层并添加它。但作为来自C#背景的开发人员,这是我对Xcode和Swift的第一个方法,我对此并不确定。 – Joker

+0

好吧,祝你好运,有进一步的实施;) –

5

要能欣赏卸下战斗,你可以创建一个带有的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) 
0

为程序化的解决方案好建议公布为止。但我想我会分享的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") 
0

在斯威夫特3使用扩展:

  1. 从任何地方

    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 
        } 
    } 
    
  2. 调用Create斯威夫特文件:

    PasswordField.setBottomBorder(); 
    
0

这里有一个处理意见调整,以及一个很好的和简单的雨燕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) 
    } 
}