我已经覆盖了一种方法
override func viewDidLayoutSubviews() {
// creating bottom line for textField
let border = CALayer()
let width = CGFloat(1.0)
border.borderColor = UIColor.whiteColor().CGColor
border.frame = CGRect(x: 0, y: emailTextField.frame.size.height - width, width: emailTextField.frame.size.width, height: emailTextField.frame.size.height)
border.borderWidth = width
emailTextField.layer.addSublayer(border)
emailTextField.layer.masksToBounds = true
}
现在发生的事情是,当我在Iphone 6上运行我的应用程序时,每个东西都运行正常。但是当我在iphone5
(模拟器+真实设备)上运行相同的代码时,viewDidLayoutSubViews
被无限次调用,我的应用程序无响应。我通过使用bool变量解决了这个问题。但我不明白为什么会这样。那么有人可以向我解释一下。
谢谢: - )
答案 0 :(得分:2)
正如文档所说,viewDidLayoutSubviews
方法需要更改布局
调用以通知视图控制器其视图刚刚布局 它的子视图。当视图控制器视图的边界发生变化时, 视图调整其子视图的位置,然后调整系统 调用此方法。但是,调用此方法并不表示 视图的子视图的各个布局已经存在 调整。每个子视图都负责调整自己的布局。
如果您未使用viewDidLoad
或loadView
xibs
方法或移至Storyboards
override func viewDidLoad() {
// creating bottom line for textField
let border = CALayer()
let width = CGFloat(1.0)
border.borderColor = UIColor.whiteColor().CGColor
border.frame = CGRect(x: 0, y: emailTextField.frame.size.height - width, width: emailTextField.frame.size.width, height: emailTextField.frame.size.height)
border.borderWidth = width
emailTextField.layer.addSublayer(border)
emailTextField.layer.masksToBounds = true
}
如果您想更改border.frame
,可以将其设置为类变量并在viewDidLayoutSubviews
方法中更改
override func viewDidLayoutSubviews() {
self.border.frame = CGRect(x: 0, y: emailTextField.frame.size.height - width, width: emailTextField.frame.size.width, height: emailTextField.frame.size.height)
self.border.borderWidth = width
}
答案 1 :(得分:0)
只需替换
emailTextField.layer.addSublayer(border)
用这个:
emailTextField.addSublayer(border)
- >您希望将子图层添加到视图中 - 因为您要将masksToBounds
属性应用于它。
答案 2 :(得分:0)
在viewDidLayoutSubviews中移动您的实现。我遇到了同样的问题。希望它能奏效。
override func viewDidLayoutSubviews()
{
//Your CODE
}