为什么我的UITextView在iOS 8中恢复为原始大小?

为什么我的UITextView在iOS 8中恢复为原始大小?,ios,objective-c,xcode,ios8,xcode6,Ios,Objective C,Xcode,Ios8,Xcode6,我有一个视图控制器,当用户单击文本视图时,它会将文本视图和其他组件一直展开到键盘顶部。它按照iOS7的预期工作: 一旦用户进入视图: htttp://s29.postimg.org/5fc3l9a5v/i_OS_Simulator_Screen_Shot_Nov_10_2014_4_56_08.png 当用户单击文本视图(或昵称文本字段)内部时: htttp://s29.postimg.org/tlmqwdwab/i_OS_Simulator_Screen_Shot_Nov_10_2014_4_

我有一个视图控制器,当用户单击文本视图时,它会将文本视图和其他组件一直展开到键盘顶部。它按照iOS7的预期工作:

一旦用户进入视图: htttp://s29.postimg.org/5fc3l9a5v/i_OS_Simulator_Screen_Shot_Nov_10_2014_4_56_08.png

当用户单击文本视图(或昵称文本字段)内部时: htttp://s29.postimg.org/tlmqwdwab/i_OS_Simulator_Screen_Shot_Nov_10_2014_4_56_13.png

当用户开始在文本视图中键入时: htttp://s29.postimg.org/leur4t67n/i_OS_Simulator_Screen_Shot_Nov_10_2014_4_56_19.png

这是在xcode6中的iOS7模拟器上。这是正确的功能。下面是xcode6模拟器上的iOS8.1,这让我很难过:

一旦用户进入视图: htttp://s3.postimg.org/dp7l6cd6n/i_OS_Simulator_Screen_Shot_Nov_10_2014_5_02_27.png

当用户单击文本视图(或昵称文本字段)内部时: htttp://s3.postimg.org/5882vf8hr/i_OS_Simulator_Screen_Shot_Nov_10_2014_5_02_37.png

当用户开始在文本视图中键入时: htttp://s3.postimg.org/mvpvtmif3/i_OS_Simulator_Screen_Shot_Nov_10_2014_5_02_48.png

出于某种原因,当我开始在键盘上输入时,textview和其他组件(如昵称文本字段、字符计数标签、post按钮、边框线等)的大小都会恢复到我在故事板上设置的大小(在iOS7上不会这样做)。这是我的密码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [UIView setAnimationsEnabled:NO];

    if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)])
    {
        if([[UIDevice currentDevice] isMultitaskingSupported])
        {
            UIApplication *application = [UIApplication sharedApplication];

            __block UIBackgroundTaskIdentifier background_task;

            background_task = [application beginBackgroundTaskWithExpirationHandler: ^ {
                [application endBackgroundTask: background_task];
                background_task = UIBackgroundTaskInvalid;
            }];

            lastTableViewRowRecent = 0;
            lastTableViewRowPopular = 0;

            [self.view setBackgroundColor:[UIColor colorWithRed:(255/255.0) green:(221/255.0) blue:(85/255.0) alpha:1.0f]];
            UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                           initWithTarget:self
                                           action:@selector(dismissKeyboard)];
            tap.cancelsTouchesInView = NO;
            [self.view addGestureRecognizer:tap];

            [[NSNotificationCenter defaultCenter] addObserver:self
                                                     selector:@selector(keyboardDidShow:)
                                                         name:UIKeyboardDidShowNotification
                                                       object:nil];

            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:)
                                                         name:UIKeyboardWillHideNotification object:self.view.window];

            self.textView.keyboardType = UIKeyboardTypeASCIICapable;
            self.nicknameTextField.keyboardType = UIKeyboardTypeASCIICapable;

            self.textView.autocorrectionType = UITextAutocorrectionTypeNo;
            self.nicknameTextField.autocorrectionType = UITextAutocorrectionTypeNo;

            self.textView.editable = false;
            self.nicknameTextField.enabled = false;
            self.postButton.enabled = false;   
        }
    }
}

-(void)textViewDidChange:(UITextView *)textView
{
    int length = textView.text.length;

    if(length > -999)
        self.countLabel.text=[NSString stringWithFormat:@"%i", 300-length];

    if([self.countLabel.text integerValue] <= 0)
        self.countLabel.textColor = [UIColor redColor];

    else
        self.countLabel.textColor = [UIColor blackColor];

    if(length > 0)
        self.textViewPlaceholderLabel.hidden = true;

    else
        self.textViewPlaceholderLabel.hidden = false;
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text isEqualToString:@"\n"])
        [textView resignFirstResponder];

    if([self.textView.text length] > 299)
        self.textView.text = [self.textView.text substringToIndex:299];

    return true;
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([string isEqualToString:@"\n"])
        [textField resignFirstResponder];

    if([self.nicknameTextField.text length] > 13)
        self.nicknameTextField.text = [self.nicknameTextField.text substringToIndex:13];

    return true;
}


- (void)keyboardDidShow:(NSNotification *)notif
{
    [UIView setAnimationsEnabled:NO];
    self.scoreLabel.hidden = true;

    NSDictionary *info = notif.userInfo;
    NSValue *value = info[UIKeyboardFrameEndUserInfoKey];

    CGRect rawFrame = [value CGRectValue];
    keyboardFrame = [self.view convertRect:rawFrame fromView:nil];

    [self.borderLineTen setFrame:CGRectMake(0, keyboardFrame.origin.y-2, 320, 2)];
    [self.thickBorderLineThree setFrame:CGRectMake(0, keyboardFrame.origin.y-10, 320, 8)];
    [self.borderLineSeven setFrame:CGRectMake(0, keyboardFrame.origin.y-12, 192, 2)];
    [self.borderLineEight setFrame:CGRectMake(200, keyboardFrame.origin.y-12, 56, 2)];
    [self.borderLineNine setFrame:CGRectMake(264, keyboardFrame.origin.y-12, 56, 2)];
    [self.nicknameTextField setFrame:CGRectMake(10, keyboardFrame.origin.y-50, 182, 38)];
    [self.leftNicknameLabel setFrame:CGRectMake(0, keyboardFrame.origin.y-50, 10, 38)];
    [self.borderLineFourteen setFrame:CGRectMake(190, keyboardFrame.origin.y-50, 2, 38)];
    [self.borderLineEleven setFrame:CGRectMake(200, keyboardFrame.origin.y-50, 2, 38)];
    [self.borderLineTwelve setFrame:CGRectMake(254, keyboardFrame.origin.y-50, 2, 38)];
    [self.borderLineThirteen setFrame:CGRectMake(264, keyboardFrame.origin.y-50, 2, 38)];
    [self.thickBorderLineFour setFrame:CGRectMake(192, keyboardFrame.origin.y-50, 8, 40)];
    [self.thickBorderLineFive setFrame:CGRectMake(256, keyboardFrame.origin.y-50, 8, 40)];
    [self.countLabel setFrame:CGRectMake(200, keyboardFrame.origin.y-50, 56, 38)];
    [self.postButton setFrame:CGRectMake(264, keyboardFrame.origin.y-50, 56, 38)];
    [self.borderLineFour setFrame:CGRectMake(0, keyboardFrame.origin.y-50, 192, 2)];
    [self.borderLineFive setFrame:CGRectMake(200, keyboardFrame.origin.y-50, 56, 2)];
    [self.borderLineSix setFrame:CGRectMake(264, keyboardFrame.origin.y-50, 56, 2)];
    [self.thickBorderLineTwo setFrame:CGRectMake(0, keyboardFrame.origin.y-58, 320, 8)];
    [self.borderLineThree setFrame:CGRectMake(0, keyboardFrame.origin.y-60, 320, 2)];
    [self.textView setFrame:CGRectMake(0, 86, 320, keyboardFrame.origin.y-86-60)];
}

- (void)keyboardWillHide:(NSNotification *)notif
{
    [UIView setAnimationsEnabled:NO];
    NSLog(@"This doesn't get displayed when I start typing in textview");
    [self.borderLineTen setFrame:CGRectMake(0, 262, 320, 2)];
    [self.thickBorderLineThree setFrame:CGRectMake(0, 254, 320, 8)];
    [self.borderLineSeven setFrame:CGRectMake(0, 252, 192, 2)];
    [self.borderLineEight setFrame:CGRectMake(200, 252, 56, 2)];
    [self.borderLineNine setFrame:CGRectMake(264, 252, 56, 2)];
    [self.nicknameTextField setFrame:CGRectMake(10, 214, 182, 38)];
    [self.leftNicknameLabel setFrame:CGRectMake(0, 214, 10, 38)];
    [self.borderLineFourteen setFrame:CGRectMake(190, 216, 2, 38)];
    [self.borderLineEleven setFrame:CGRectMake(200, 216, 2, 38)];
    [self.borderLineTwelve setFrame:CGRectMake(254, 216, 2, 38)];
    [self.borderLineThirteen setFrame:CGRectMake(264, 216, 2, 38)];
    [self.thickBorderLineFour setFrame:CGRectMake(192, 214, 8, 40)];
    [self.thickBorderLineFive setFrame:CGRectMake(256, 214, 8, 40)];
    [self.countLabel setFrame:CGRectMake(200, 214, 56, 38)];
    [self.postButton setFrame:CGRectMake(264, 214, 56, 38)];
    [self.borderLineFour setFrame:CGRectMake(0, 214, 192, 2)];
    [self.borderLineFive setFrame:CGRectMake(200, 214, 56, 2)];
    [self.borderLineSix setFrame:CGRectMake(264, 214, 56, 2)];
    [self.thickBorderLineTwo setFrame:CGRectMake(0, 206, 320, 8)];
    [self.borderLineThree setFrame:CGRectMake(0, 204, 320, 2)];
    [self.textView setFrame:CGRectMake(0, 86, 320, 118)];
    self.scoreLabel.hidden = false;
}

-(void)dismissKeyboard
{
    [self.textView resignFirstResponder];
    [self.nicknameTextField resignFirstResponder];
}

@end
-(void)viewDidLoad
{
[超级视图下载];
[UIView SetAnimationEnabled:否];
如果([[UIDevice currentDevice]响应选择器:@selector(isMultitaskingSupported)])
{
如果([[UIDevice currentDevice]支持多任务])
{
UIApplication*application=[UIApplication sharedApplication];
__块UIBackgroundTaskIdentifier后台任务;
后台任务=[应用程序beginBackgroundTaskWithExpirationHandler:^{
[应用程序endBackgroundTask:background_task];
后台任务=UIBackgroundTask无效;
}];
lastTableViewRowRecent=0;
lastTableViewRowPopular=0;
[self.view setBackgroundColor:[UIColor Withred:(255/255.0)green:(221/255.0)blue:(85/255.0)alpha:1.0f];
UITapGestureRecognizer*点击=[[UITapGestureRecognizer alloc]
initWithTarget:self
操作:@选择器(键盘)];
tap.cancelsTouchesInView=否;
[self.view addgesturecognizer:tap];
[[NSNotificationCenter defaultCenter]添加观察者:self
选择器:@选择器(键盘显示:)
名称:UIKeyboardDidShowNotification
对象:无];
[[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(keyboardWillHide:)
名称:UIKeyboardWillHideNotification对象:self.view.window];
self.textView.keyboardType=UIKeyboardTypesCapable;
self.昵称TextField.keyboardType=UIKeyboardTypesCapable;
self.textView.autocorrectionType=UITextAutocorrectionTypeNo;
self.昵称TextField.autocorrectionType=UITextAutocorrectionTypeNo;
self.textView.editable=false;
self.昵称textfield.enabled=false;
self.postButton.enabled=false;
}
}
}
-(无效)textViewDidChange:(UITextView*)textView
{
int length=textView.text.length;
如果(长度>-999)
self.countLabel.text=[NSString stringWithFormat:@“%i”,300长度];
if([self.countLabel.text integerValue]0)
self.textViewPlaceholderLabel.hidden=true;
其他的
self.textViewPlaceholderLabel.hidden=false;
}
-(BOOL)文本视图:(UITextView*)文本视图应更改文本范围:(NSRange)范围替换文本:(NSString*)文本
{
如果([文本IsequalString:@“\n”])
[textView辞职第一响应者];
如果([self.textView.text length]>299)
self.textView.text=[self.textView.text substringToIndex:299];
返回true;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串
{
如果([string IsequalString:@“\n”])
[textField resignFirstResponder];
如果([self.昵称textfield.text length]>13)
self.昵称TextField.text=[self.昵称TextField.text substringToIndex:13];
返回true;
}
-(无效)键盘显示:(NSNotification*)notif
{
[UIView SetAnimationEnabled:否];
self.scoreLabel.hidden=true;
NSDictionary*info=notif.userInfo;
NSValue*value=info[UIKeyboardFrameEndUserInfoKey];
CGRect rawFrame=[value CGRectValue];
keyboardFrame=[self.view convertRect:rawFrame fromView:nil];
[self.borderLineTen设置帧:CGRectMake(0,keyboardFrame.origin.y-2320,2)];
[self.thickBorderLineThree-setFrame:CGRectMake(0,keyboardFrame.origin.y-10320,8)];
[self.borderLineSeven setFrame:CGRectMake(0,keyboardFrame.origin.y-12192,2)];
[self.borderline8setframe:CGRectMake(200,keyboardFrame.origin.y-12,56,2)];
[self.borderLineNine setFrame:CGRectMake(264,keyboardFrame.origin.y-12,56,2)];
[self.昵称textfield setFrame:CGRectMake(10,keyboardFrame.origin.y-50182,38)];
[self.left昵称标签setFrame:CGRectMake(0,keyboardFrame.origin.y-50,10,38)];
[self.borderline14setframe:CGRectMake(190,keyboardFrame.origin.y-50,2,38)];
[self.borderLineEleven setFrame:CGRectMake(200,keyboardFrame.origin.y-50,2,38)];
[self.borderline12设置框:CGRectMake(254,键盘