Ниже приведено изображение некоторых UITextFields. Что касается большого в нижней части, как мне заставить его начинать текст в левом верхнем углу (а не в середине), и как я могу заставить их все начать немного вправо. Как вы можете видеть, они неловко близки к левому краю.Изменение макета текста в UITextField
ответ
Вы можете sublcass к пользовательскому TextField:
import UIKit
class CustomTextField: UITextField {
var inset:CGFloat = 12 // You can set the inset you want
override func textRect(forBounds bounds: CGRect) -> CGRect {
return bounds.insetBy(dx: inset, dy: 0)
}
override func editingRect(forBounds bounds: CGRect) -> CGRect {
return bounds.insetBy(dx: inset, dy: 0)
}
}
В результате, вы можете увидеть вставку из CustomTextField:
Редактировать
@Gabe Spound, вы можете искать методы делегата. – aircraft
Для TextField, переопределить следующие методы:
class InsetTextField: UITextField {
var inset: CGFloat = 10
override func textRect(forBounds bounds: CGRect) -> CGRect {
return bounds.insetBy(dx: inset, dy: 0)
}
override func editingRect(forBounds bounds: CGRect) -> CGRect {
return bounds.insetBy(dx: inset, dy: 0)
}
override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
return bounds.insetBy(dx: inset, dy: 0)
}
}
Для TextView:
textView.contentInset = UIEdgeInsetsMake(inset, inset, inset, inset);
И вы можете быть вовлечены, когда TextView закончит редактирование, проверьте this question.
Вы могли бы предоставить немного более подробную информацию? Я делаю расширение для этих классов? –
@GabeSpound проверить мое новое редактирование. – AlvinZhu
По умолчанию UITextFields имеет только одну строку. Исходя из вашего изображения, я предполагаю, что вы хотите, чтобы у пользователя было место для ввода абзаца. Для абзацев лучше использовать UITextViews. Это будет более простое решение вашей проблемы.
Я всегда использую TextViews для биографий, потому что это просто упрощает мою жизнь.
Я не могу использовать текстовое представление, потому что мне нужно иметь возможность создавать Actions, когда они закончены, и у них нет этой опции. –
добавить оставил обивка вашего текстового поля
let paddingVie = UIView(frame: CGRect(x: 0, y:0, width: 10, height: 10))
yourtextField.leftView = paddingVie
yourtextField.leftViewMode = .always
для TextView добавить
yourTextVieName.textContainerInset =
UIEdgeInsetsMake(8,5,8,5); // top, left, bottom, right
ли левый отступы. А для текстового просмотра вы должны использовать левую вставку. –