К сожалению, ни один из ответов не сработал для меня.
@ ответ blackjacx работал, но только иногда: (
Я начал отладку, и вот что я обнаружил:
1 - Реальная проблема, похоже, связана с частным подпредставлением UITextField типа UIFieldEditorContentView
Ниже вы можете видеть, что y
его подпредставления не совпадает с UITextField
самого:
Осознав это, я нашел следующий обходной путь:
override func layoutSubviews() {
super.layoutSubviews()
fixMisplacedEditorContentView()
}
func fixMisplacedEditorContentView() {
if #available(iOS 10, *) {
for view in subviews {
if view.bounds.origin.y < 0 {
view.bounds.origin = CGPoint(x: view.bounds.origin.x, y: 0)
}
}
}
}
Вам потребуется создать подкласс UITextField
и переопределить layoutSubviews
, чтобы добавить возможность вручную установить 0
y
любого подпредставления, для которого установлено отрицательное значение. Поскольку эта проблема не возникает в iOS 9, описанной ниже, я добавил проверку, чтобы обойти ее, только когда она установлена в iOS 10.
Результат вы можете увидеть ниже:
2 - Этот обходной путь не работает, если пользователь выбирает поддиапазон текста (selectAll работает отлично)
Поскольку выбор текста не является обязательным требованием для моего приложения, я скорее отключаю его. Для этого вы можете использовать следующий код (Swift 3):
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if #available(iOS 10, *) {
if action == #selector(UIResponderStandardEditActions.select(_:)) {
return false
}
}
return super.canPerformAction(action, withSender: sender)
}