Dou*_*ith 7 objective-c uiscrollview uitextview ios ios7
我的代码在iOS 6下运行正常,但在iOS 7下我似乎无法使我的UITextView设备屏幕的高度减去键盘(换句话说,当键盘启动时,UITextView仍然是全屏,但是不要去键盘下面).
首先,当我将UITextView放入我的视图控制器(嵌入在导航控制器中)时,它也必须位于导航栏下,否则它会开始太远.
从那里我尝试了所有这些例子:
self.textView.contentInset = UIEdgeInsetsMake(0, 0, 230, 0);
self.textView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 230, 0);
self.textView.textContainerInset = UIEdgeInsetsMake(0, 0, 230, 0);
Run Code Online (Sandbox Code Playgroud)
每个键盘的位置仍然会在某些点上覆盖textview.我也试过设置一个高度约束并操纵常量,但没有运气.
self.height.constant = self.height.constant - 240.0;
Run Code Online (Sandbox Code Playgroud)
(height约束的出口在哪里.)
这些都是在[self.textField becomeFirstResponder];电话会议之前和之后都尝试过的.
我怎么做到这一点?我只想要一个全屏UITextView,其中插入符号不会出现在键盘下面,但它在iOS 7下看起来很疯狂.
在 iOS7 之前,执行此操作的“正确”方法始终是在键盘显示或隐藏时调整 UITextView(UIScrollView 子类)的 contentInset 属性。我没有亲自调查过,但这似乎在 iOS7 中效果不佳,因为底部插图要么不被遵守,要么光标仍然位于键盘下方存在一些问题。 请参阅此问题以供参考。
在您使用自动布局的情况下,您想要的只是“全屏”文本视图,您只需在键盘显示或隐藏时调整单个约束即可。这将调整文本视图的高度:
@implementation TSViewController
{
IBOutlet NSLayoutConstraint* _textViewSpaceToBottomConstraint;
}
- (void) dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver: self];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
- (void) keyboardWillShow: (NSNotification*) n
{
NSValue* bv = n.userInfo[UIKeyboardFrameEndUserInfoKey];
CGRect br = [bv CGRectValue];
_textViewSpaceToBottomConstraint.constant = br.size.height;
}
- (void) keyboardWillHide: (NSNotification*) n
{
_textViewSpaceToBottomConstraint.constant = 0;
}
@end
Run Code Online (Sandbox Code Playgroud)
在故事板中,将 UITextView 放在视图控制器视图上,并添加 4 个约束以将其边缘粘合到视图控制器视图的边缘。将底部空间约束连接到视图控制器中的 IBOutlet _textViewSpaceToBottomConstraint。
您可能可以稍微尝试一下并调整动画块内的大小,借用键盘通知中的动画时间和曲线。
我有兴趣看到一个设置 contentInset 并使其正常工作的版本......

编辑
这是涵盖该主题的另一个 SO 问题,并提供了解决方案。 显然,插入符号(光标)超出框架的问题与我上面提到的问题相同。执行此操作的“正确”方法是设置 contentInset 属性。因此,解决此问题应该使您能够简单地调整 contentInset 与更改文本视图框架(通过 .frame 或通过约束)。
编辑2
关于这一点的最后一个想法。在iOS7中,键盘是半透明的。用户应该能够看到键盘后面的内容。通过将 UITextView 的大小调整到键盘上方,这种情况就不会发生。所以“正确”的解决方案仍然是调整文本视图底部的contentInset,将键盘的高度添加到文本视图的可滚动区域。然后,在理想的情况下,您可以调整文本视图的 contentOffset,以在键盘出现时保持插入符号在视图中。最后,添加“修复”,以在显示插入符号但用户输入换行符时将插入符号保持在键盘上方的位置。
| 归档时间: |
|
| 查看次数: |
3641 次 |
| 最近记录: |