更改UITextView框架

时间:2013-05-05 11:49:40

标签: iphone ios objective-c

ViewController UITextField(顶视图)和UITextView(底视图)。当用户开始编辑时,我希望将UITextView移动到视图的顶部。 当用户从UITextView开始编辑时,一切都很好,但是当用户首先想要编辑UITextField然后UITextView(没有隐藏键盘)时,它就无法正常工作。隐藏UITextField,但UITextView不会更改其框架。 我尝试使用UIKeyboardDidShowNotification,但仅在键盘弹出时调用它。

重现问题的代码: ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextViewDelegate>
@property (weak, nonatomic) IBOutlet UITextField *titleTF;
@property (weak, nonatomic) IBOutlet UITextView *bodyTV;
@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController
-(void)textViewDidBeginEditing:(UITextView *)textView {
    self.titleTF.hidden=YES;
    CGRect newFrame=CGRectMake(20, 20, textView.frame.size.width, 100);
    textView.frame=newFrame;
}
@end

运行应用程序并单击UITextView,应用程序将如下所示: http://imageshack.us/photo/my-images/694/32568213.png 现在一切都很好(UITextField被隐藏,UITextView被移动并调整大小)。

再次启动应用。首先单击UITextField,然后单击UITextView。应用看起来像这样: http://imageshack.us/photo/my-images/843/66433184.png UITextField是隐藏的,但是UITextView没有改变他的框架。

1 个答案:

答案 0 :(得分:1)

在TextView编辑开始时向上移动视图, 编辑结束时将其向下移动。

只需将这两种方法,

-(void) textViewDidBeginEditing:(UITextView *)textView{
    CGRect frame = self.view.frame;
    frame.origin.y = -(textView.frame.origin.y + textView.frame.size.height);
    [UIView animateWithDuration:0.3f animations:^{
        self.view.frame = frame;
    }];
}

-(void) textViewDidEndEditing:(UITextView *)textView{
    CGRect frame = self.view.frame;
    frame.origin.y = 0;
    [UIView animateWithDuration:0.3f animations:^{
        self.view.frame = frame;
    }];
}