我一直在爲一個相當愚蠢的問題奮鬥了幾天,而我一直無法找到解決方案。Swift 3:當用戶觸摸textView的光標時發出問題
我有以下層次視圖控制器:xcode screenshot
用戶將不得不增加TextView的圖片下方(我還沒有實現這個功能還)的可能性。 我將textView的「滾動啓用」屬性設置爲false,以便根據用戶鍵入的內容自動增加或減少高度,該用戶按預期工作。 我使用通知中心,從而改變了滾動的contentInsets時表示,像這樣的鍵盤:
func keyboardWillShow(notification: NSNotification) {
var userInfo = notification.userInfo!
var keyboardFrame: CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
keyboardFrame = self.view.convert(keyboardFrame, from: nil)
var contentInsets: UIEdgeInsets = self.scrollView.contentInset
contentInsets.bottom = keyboardFrame.size.height + 3*self.postContentTextView.font!.lineHeight
self.scrollView.contentInset = contentInsets
}
func keyboardWillHide(notification: NSNotification) {
let contentInsets = UIEdgeInsets.zero
self.scrollView.contentInset = contentInsets
}
在viewDidLoad中的下列觀察員:
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
我還設置了滾動視圖內容大小在viewDidLayoutSubviews功能:
override func viewDidLayoutSubviews() {
self.scrollView.contentSize = self.postContentTextView.frame.size
}
一切似乎工作正常,直到我意識到,當文本是「太長」(或也許它是別的),當我觸摸它們時,我無法選擇textView的最後一行。實際上,當我觸摸屏幕時,光標應該出現在我剛剛觸摸過的線上。這通常工作四分之三的textView,但它看起來像textView沒有檢測到我的手指最後一行(高度越大,這個問題越嚴重)。 在開始時,我認爲我的屏幕有問題,但是我在iOS模擬器上測試了它,發生了同樣的問題。 我不得不承認我完全無能爲力。你們有沒有對這個問題會有什麼想法?
可能是您有一個意外添加的透明視圖。任何可能性呢? – jegadeesh
你檢查過它的限制嗎? textView可能不在其超級視圖的範圍之內。設置'clipsToBounds'來超級查看和測試它。如果它超出了超視界,它不會檢測到觸摸 – Bali
就是這樣!當文本太長時,我的textView變得比我的內容視圖更大。我怎麼沒有想到這個?非常感謝你!問題解決了。 – Lantian