use*_*140 6 objective-c uitextview ios
我想在键盘出现时调整文本视图的大小.我的代码如下.我有自动布局,因此使用了来自superview的textView-> bottom space的约束,并通过IBOutlet distanceFromBottom引用它.
- (void)keyboardWillShow:(NSNotification *)notification
{
[UIView animateWithDuration:0.3 animations:^{
NSDictionary* d = [notification userInfo];
CGRect r = [d[UIKeyboardFrameEndUserInfoKey] CGRectValue];
r = [textView convertRect:r fromView:Nil];
if(IS_IPHONE_6||IS_IPHONE_6P)
distanceFromBottom.constant = r.origin.y+78;
else if(IS_IPHONE_5)
distanceFromBottom.constant = r.origin.y+183;
}];
}
Run Code Online (Sandbox Code Playgroud)
上面的代码非常完美.我不明白为什么我需要为iPhone6添加+78或为iPhone5添加183.这两个值我带来了反复试验.如果我不添加这些,textView扩展到键盘下方.请帮我解开这个谜.
小智 14
在viewWillAppear方法中,添加以下内容:
- (void) viewWillAppear:(BOOL)paramAnimated{
[super viewWillAppear:paramAnimated];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(handleKeyboardDidShow:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(handleKeyboardWillHide:)
name:UIKeyboardWillHideNotification object:nil];
}
Run Code Online (Sandbox Code Playgroud)
然后实现通知中心的两种方法,如下所示:
- (void) handleKeyboardDidShow:(NSNotification *)paramNotification{
NSValue *keyboardRectAsObject =
[[paramNotification userInfo]
objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = CGRectZero;
[keyboardRectAsObject getValue:&keyboardRect];
yourTextView.contentInset =
UIEdgeInsetsMake(0.0f,
0.0f,
keyboardRect.size.height,
0.0f);
}
Run Code Online (Sandbox Code Playgroud)
而另一个像:
- (void) handleKeyboardWillHide:(NSNotification *)paramNotification{
yourTextView.contentInset = UIEdgeInsetsZero;
}
Run Code Online (Sandbox Code Playgroud)
它适用于所有设备;)
Swift /修改版
使用上面的内容,我做了一些调整,以便在键盘显示和隐藏时使用NSLayoutConstraint更改高度constant属性.如果您旋转设备,这也适用.
1.设置TextView约束
然后控制从您的高度约束拖出一个出口到该类.
2.添加以下内容
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
NSNotificationCenter.defaultCenter().addObserver(self, selector:#selector(SkillDescriptionViewController.keyboardWillShowHandle(_:)), name: UIKeyboardDidShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector:#selector(SkillDescriptionViewController.keyboardWillHideHandle), name: UIKeyboardWillHideNotification, object: nil)
}
func keyboardWillShowHandle(note:NSNotification) {
guard let keyboardRect = note.userInfo![UIKeyboardFrameEndUserInfoKey] as? NSValue else { return }
let kbFrame = keyboardRect.CGRectValue()
tvHeight.constant = -kbFrame.height
view.layoutIfNeeded()
}
func keyboardWillHideHandle() {
tvHeight.constant = 0
view.layoutIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2751 次 |
| 最近记录: |