[英]iOS: UIView origin y not changing on iOS 9
I'm trying to set my self.mainView.frame.origin.y
when the keyboard
is displaying. 我正在尝试在显示keyboard
时设置self.mainView.frame.origin.y
。 It works fine on iOS 11
but not in iOS 9
. 它可以在iOS 11
上正常运行,但不能在iOS 9
。
This is my code: 这是我的代码:
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
print("=== textFieldShouldBeginEditing 1 \(self.mainView.frame.origin.y) ")
self.mainView.frame.origin.y -= 150
self.mainView.setNeedsLayout()
self.mainView.layoutIfNeeded()
print("=== textFieldShouldBeginEditing 2 \(self.mainView.frame.origin.y) ")
return true
}
internal func textFieldShouldReturn(_ textField: UITextField) -> Bool {
print("=== textFieldShouldReturn 1 \(self.mainView.frame.origin.y) ")
self.mainView.frame.origin.y = self.normalMainViewOriginY
textField.endEditing(true)
print("=== textFieldShouldReturn 2 \(self.mainView.frame.origin.y) ")
return true
}
In the viewDidLoad()
: 在viewDidLoad()
:
self.normalMainViewOriginY = self.mainView.frame.origin.y
I tested also the same think using NSNotification
but I'm getting the same problem in iOS 9
我也使用NSNotification
测试了相同的想法,但在iOS 9
遇到了相同的问题
Those are the prints output: 这些是打印输出:
iOS 9: iOS 9:
=== normalMainViewOriginY: 243.0 (from viewDidLoad()
) === normalMainViewOriginY:243.0(来自viewDidLoad()
)
=== textFieldShouldBeginEditing 1: 208.5 === textFieldShouldBeginEditing 1:208.5
=== textFieldShouldBeginEditing 2: 208.5 === textFieldShouldBeginEditing 2:208.5
=== textFieldShouldReturn 1: 208.5 === textFieldShould返回1:208.5
=== textFieldShouldReturn 2: 243.0 === textFieldShouldReturn 2:243.0
iOS 11: iOS 11:
=== normalMainViewOriginY: 243.0 (from viewDidLoad()
) === normalMainViewOriginY:243.0(来自viewDidLoad()
)
=== textFieldShouldBeginEditing 1: 208.5 === textFieldShouldBeginEditing 1:208.5
=== textFieldShouldBeginEditing 2: 58.5 === textFieldShouldBeginEditing 2:58.5
=== textFieldShouldReturn 1: 58.5 === textFieldShould返回1:58.5
=== textFieldShouldReturn 2: 243.0 === textFieldShouldReturn 2:243.0
The problem is that changing frames doesn't affect the underlining layout constraints , so try constraints it won't fail , say you have the top constraint of mainView as mainViewTopCon
问题在于,更改框架不会影响下划线的布局约束,因此请尝试使用约束不会失败,例如您将mainView的顶部约束作为mainViewTopCon
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
print("=== textFieldShouldBeginEditing 1 \(self.mainView.frame.origin.y) ")
self.mainViewTopCon.constant -= 150
self.mainView.layoutIfNeeded()
print("=== textFieldShouldBeginEditing 2 \(self.mainView.frame.origin.y) ")
return true
}
internal func textFieldShouldReturn(_ textField: UITextField) -> Bool {
print("=== textFieldShouldReturn 1 \(self.mainView.frame.origin.y) ")
self.mainViewTopCon.constant = 0 // or value in IB that you set initally
self.mainView.layoutIfNeeded()
textField.endEditing(true)
print("=== textFieldShouldReturn 2 \(self.mainView.frame.origin.y) ")
return true
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.