2017-06-14 89 views
1

我一直在爲一個相當愚蠢的問題奮鬥了幾天,而我一直無法找到解決方案。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模擬器上測試了它,發生了同樣的問題。 我不得不承認我完全無能爲力。你們有沒有對這個問題會有什麼想法?

+0

可能是您有一個意外添加的透明視圖。任何可能性呢? – jegadeesh

+0

你檢查過它的限制嗎? textView可能不在其超級視圖的範圍之內。設置'clipsToBounds'來超級查看和測試它。如果它超出了超視界,它不會檢測到觸摸 – Bali

+0

就是這樣!當文本太長時,我的textView變得比我的內容視圖更大。我怎麼沒有想到這個?非常感謝你!問題解決了。 – Lantian

回答

2

您是否檢查過它的約束條件? UITextView可能不在其超級瀏覽的bounds之外。設置clipsToBounds爲superview &測試一下。如果它超出了超級視圖bounds,它將不會檢測到觸摸