上面那个黄色框是当前正在编辑的可编辑 UITextView(是第一响应者)。但你可能分不清吧?因为没有游标。但是有……就是黄色textView左下角的那个小蓝点。它略低于 textViews 底部边框。因此,如果我继续换行或按回车键,文本将自然向上移动。但是光标永远不会是“水平”的,或者是在 UITextView 的底部边框上方。它总是只是勉强从底部伸出,在边界下方几个点。
为什么?这在 iOS 6 中不是问题。有什么办法解决这个问题吗?
上面那个黄色框是当前正在编辑的可编辑 UITextView(是第一响应者)。但你可能分不清吧?因为没有游标。但是有……就是黄色textView左下角的那个小蓝点。它略低于 textViews 底部边框。因此,如果我继续换行或按回车键,文本将自然向上移动。但是光标永远不会是“水平”的,或者是在 UITextView 的底部边框上方。它总是只是勉强从底部伸出,在边界下方几个点。
为什么?这在 iOS 6 中不是问题。有什么办法解决这个问题吗?
这个错误在 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];
}];
}
}
你的问题会解决的。
如果您在导航控制器场景中,我认为这实际上是 iOS 7 中引入的属性的结果:(automaticallyAdjustsScrollViewInsets
请参阅iOS 7 过渡指南)
这默认为 YES,并会尝试通过调整导航控制器高度的滚动偏移来巧妙地使用 UITextView(它本身就是一个滚动视图)。
因此,解决方案是将此属性设置为 NO viewDidLoad
(注意不要在 iOS 6 上调用它,因为它仅在 iOS 7 中可用)。
- (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;
}
根据 Todd 给出的答案,您可以在应用程序完成启动时运行的方法中添加这样的内容:
[[UITextView appearance] setTintColor:[UIColor redColor]];
[[UITextField appearance] setTintColor:[UIColor redColor]];
这将影响所有 UITextFields 和 UITextViews。
您只需要设置 UITextView 的 tintColor。
在对我有用的代码中(我把它放在 viewDidLoad 中)放入类似下面的内容。
self.textView.tintColor = [UIColor redColor];