为什么我的UITextView在iOS 8中恢复为原始大小?
我有一个视图控制器,当用户单击文本视图时,它会将文本视图和其他组件一直展开到键盘顶部。它按照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上不会这样做)。这是我的密码:为什么我的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_
- (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,键盘