2013-10-08 68 views
23

Why is this a thing thats happening在iOS 7編輯時UITextView光標位置不正確?爲什麼?

上面的黃色框是一個可編輯的UITextView,它當前正在編輯(是第一響應者)。但是你可能說不清楚?因爲沒有光標。但有......這是黃色textView左下方的小藍點。它略低於textViews底部邊界。所以如果我繼續換行,或者按下回車鍵,那麼文本會自然而然地向上移動。但是遊標永遠不會「水平」,或者在UITextView的底部邊界之上。它總是勉強地從底部伸出,在邊界以下幾點。

爲什麼?這在iOS 6中不是問題。有什麼方法可以解決這個問題?

+0

我面臨同樣的情況,我將uitextview製作爲可滾動的,它開始爲我工作。它有點奇怪,但爲我工作。 –

回答

41

這個bug在iOS 7.0中可以通過修改textView委託方法來解決。

嘗試下面的代碼

- (void)textViewDidChange:(UITextView *)textView { 
    CGRect line = [textView caretRectForPosition: 
     textView.selectedTextRange.start]; 
    CGFloat overflow = line.origin.y + line.size.height 
     - (textView.contentOffset.y + textView.bounds.size.height 
     - textView.contentInset.bottom - textView.contentInset.top); 
    if (overflow > 0) { 
    // We are at the bottom of the visible text and introduced a line feed, scroll down (iOS 7 does not do it) 
    // Scroll caret to visible area 
     CGPoint offset = textView.contentOffset; 
     offset.y += overflow + 7; // leave 7 pixels margin 
    // Cannot animate with setContentOffset:animated: or caret will not appear 
     [UIView animateWithDuration:.2 animations:^{ 
      [textView setContentOffset:offset]; 
     }]; 
    } 
} 

您的問題將得到解決。

+0

將光標設置在文本視圖的末尾時這是正確的,但是當您輸入字符時,這裏存在問題。當您停止時,它會隨着鍵入而變得更高。這似乎是在刺激眼睛..任何修復? – caribbean

+0

它對我來說工作正常我沒有遇到像你所說的問題。 – Pratik

+0

這太好了。另一個問題是當你的第一個選定的文本部分是在屏幕的末尾,因此即將到來的鍵盤覆蓋。我不得不將這段代碼添加到textViewDidChangeSelection中,以便覆蓋這種情況 – nobre

-3

你只需要設置UITextView的tintColor。

在代碼(我把它放在viewDidLoad中)爲我工作。

self.textView.tintColor = [UIColor redColor]; 
+1

迄今爲止的最佳解決方案。 – Unheilig

+3

這改變了光標的顏色......這是如何解決問題的? – Joe

+5

我真的很想在iOS 7中修復與UITextView相關的問題,我實際上已經嘗試了這個解決方案。紅色沒有工作,但橙色。 – bilobatum

-1

基礎上託德給出的答案,你可以把這樣的事情在方法運行時,應用程序完成啓動:

[[UITextView appearance] setTintColor:[UIColor redColor]]; 
    [[UITextField appearance] setTintColor:[UIColor redColor]]; 

這將影響到所有的UITextFields和UITextViews。

+5

改變色調顏色與光標放置有什麼關係? – Joe

+0

我在這裏找到了一個解決方案,爲我的看不見的光標,我發現託德的答案解決了我的問題。我添加了這個答案,作爲託德答案的一個改進。 – tavi

-1
- (BOOL) textView:(UITextView *)sender shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    NSString * newText = [sender.text stringByReplacingCharactersInRange:range withString:text]; 
    [self setFramesForText:newText]; 

    if (!IOS_VERSION_6_OR_LESS) { 
     if ([text isEqualToString:@"\n"]){ 
      [textView setContentOffset:CGPointMake(textView.contentOffset.x, 999999999)]; 
     } 
    } 

    return YES; 
} 
3

如果您在導航控制器的情況是,我認爲這實際上是在iOS的7引入了財產的結果:automaticallyAdjustsScrollViewInsets(見iOS 7 transition guide

此默認爲YES,並會嘗試通過調整導航控制器高度的滾動偏移量來使UITextView(本身就是滾動視圖)變得更加巧妙。

因此,解決方法是將您的viewDidLoad中的此屬性設置爲NO(注意不要在iOS 6上調用它,因爲它僅適用於iOS 7)。

相關問題