[英]How to scroll to last character in UITextField?
我試圖從Apple的“Phone”應用程序重建UITextField
。
我構建了一個小鍵盤,每個按鈕觸發一個特定值(0-9,#,*)並將其附加到文本字段的文本中。
textAlignment
屬性設置為center
。 但是,插入數字時,文本字段不會滾動或移動到最后一個字符。 F.ex.,如果有超過10個數字並且我正在添加第11個數字,則不會顯示該數字,因為它不在屏幕上。
Apple通過首先縮小字體大小然后滾動到光標位置來處理此問題。
是否有一個簡單的技巧來實現相同的結果?
我附上了兩張照片。
使用此示例。 將光標和滾動設置到UITextField
的末尾。 由於您使用UI進行操作,因此必須在主線程中執行此操作
DispatchQueue.main.async {[weak self] in
self?.textField.becomeFirstResponder() // to focuse on this UITextField
let newPosition = self?.textField.endOfDocument ?? UITextPosition()
self?.textField.selectedTextRange = self?.textField.textRange(from: newPosition, to: newPosition)
}
為什么使用文本字段而不是使用uilabel?
這很容易解決
label.adjustsFontSizeToFitWidth = true
label.textAlignment = .center
label.setFillSuperview(withPadding: UIEdgeInsets(top: 0, left: whatYouNeed, bottom: 0, right: whatYouNeed))
並為UIView添加擴展
extension UIView {
func setFillSuperview(withPadding padding: UIEdgeInsets = .zero) {
translatesAutoresizingMaskIntoConstraints = false
if let superviewLeadingAnchor = superview?.leadingAnchor {
leadingAnchor.constraint(equalTo: superviewLeadingAnchor, constant: padding.left).isActive = true
}
if let superviewTrailingAnchor = superview?.trailingAnchor {
trailingAnchor.constraint(equalTo: superviewTrailingAnchor, constant: -padding.right).isActive = true
}
if let superviewBottomAnchor = superview?.bottomAnchor {
bottomAnchor.constraint(equalTo: superviewBottomAnchor, constant: -padding.bottom).isActive = true
}
if let superviewTopAnchor = superview?.topAnchor {
topAnchor.constraint(equalTo: superviewTopAnchor, constant: padding.top).isActive = true
}
}
在viewcontroller中使用此代碼段可在文本增加時縮小文本。
func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
myTextField.minimumFontSize = 4.0
myTextField.setNeedsLayout()
myTextField.layoutIfNeeded()
}
雖然我不喜歡回答我自己的問題,但由於我剛剛找到解決方案,似乎沒有辦法解決。
Alastar部分正確; 而不是使用UITextField
,使用UILabel
更簡單。
但是,對我來說這個技巧的單行是設置換行模式來截斷頭部:
label.lineBreakMode = .byTruncatingHead
這條路,
顯示該行以使末尾適合容器,並且行開頭的缺失文本由省略號字形表示。 雖然此模式適用於多行文本,但它更常用於單行文本。
這是Apple在其“電話”應用程序(撥號屏幕)中使用的確切行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.