滚动UITextViewdynamic设置调整为默认

我已经实现了一个ViewController,它有一个底部的UIView包含UITextView ,禁用滚动function,当你在里面input的时候resize。

当文本的高度达到90像素,我启用滚动 – >

 scrollEnabled = YES; 

应该发生什么事情: UITextView和它的superview应该保持它们被限制的高度(超过90像素限制)。

会发生什么情况: UITextView调整回它的默认值。

更多信息:我正在使用多行UITextField的代码作为我的底部视图。 我正在使用iOS7。

任何帮助表示赞赏,谢谢。

编辑:我的代码:

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. self.textBox.scrollEnabled = NO; self.textBox.font = [UIFont fontWithName:@"Helvetica" size:14]; [self registerForKeyboardNotifications]; } - (void)registerForKeyboardNotifications { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(keyPressed:) name: UITextViewTextDidChangeNotification object: nil]; } - (void)keyboardWasShown:(NSNotification *)notification { NSDictionary *info = [notification userInfo]; CGSize kbSize = [info[UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; [self setViewMovedUp:YES byHeight:kbSize.height]; } - (void)keyboardWillHide:(NSNotification *)notification { NSDictionary *info = [notification userInfo]; CGSize kbSize = [info[UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; [self setViewMovedUp:NO byHeight:kbSize.height]; } - (void)keyPressed:(id)sender { CGRect textRect = [self.textBox.text boundingRectWithSize:CGSizeMake(255,MAXFLOAT) options:(NSStringDrawingUsesLineFragmentOrigin) attributes:@{NSFontAttributeName : [UIFont fontWithName:@"Helvetica" size:14]} context:nil]; NSInteger newSizeH = textRect.size.height; if (self.textBox.hasText) { // if the height of our new chatbox is // below 90 we can set the height if (newSizeH <= 90) { self.textBox.scrollEnabled = NO; [self.textBox scrollRectToVisible:CGRectMake(0,0,1,1) animated:NO]; // chatbox CGRect chatBoxFrame = self.textBox.frame; chatBoxFrame.size.height = newSizeH + 12; self.textBox.frame = chatBoxFrame; // form view CGRect formFrame = self.commentBox.frame; formFrame.size.height = 30 + newSizeH; self.commentBox.frame = formFrame; } // if our new height is greater than 90 // sets not set the height or move things // around and enable scrolling if (newSizeH > 90) { self.textBox.scrollEnabled = YES; CGRect frame = self.textBox.frame; frame.size.height = 102; self.textBox.frame = frame; CGRect formFrame = self.commentBox.frame; formFrame.size.height = 30 + 90; self.commentBox.frame = formFrame; } } } - (void)setViewMovedUp:(BOOL)movedUp byHeight:(CGFloat)height { int movement = movedUp ? -height : height; [UIView animateWithDuration:0.3 animations:^{ self.dataView.frame = CGRectOffset(self.dataView.frame, 0.0, movement); }]; } 

虽然我有点晚了,但只是开始。 我自己也面临同样的问题。 文本视图在滚动时回到原始大小。 我解决它的方式是更新UITextView上的高度约束。 即每次更新UITextView的大小时,还需要更新相应的约束条件。

这里是我在iOS 6和7中使用的代码。

 #pragma mark - UITextViewDelegate - (void)textViewDidChange:(UITextView *)textView { // I set _maxTextViewHeight based on device, but you can harcode it to 90 CGSize size = [textView sizeThatFits:CGSizeMake(textView.frame.size.width, _maxTextViewHeight)]; float desiredTextViewHeight = size.height - 7.5; float desiredInputViewHeight = MIN(desiredTextViewHeight + 16.0f, _maxInputViewHeight); textView.scrollEnabled = (desiredInputViewHeight == _maxInputViewHeight); NSRange bottom = NSMakeRange([textView.text length] - 1, 1); [textView scrollRangeToVisible:bottom]; CGRect inputViewFrame = _inputView.frame; float heightDelta = desiredInputViewHeight - inputViewFrame.size.height; inputViewFrame.size.height = desiredInputViewHeight; inputViewFrame.origin.y -= heightDelta; if (heightDelta != 0) { [UIView animateWithDuration:0.1 animations:^{ _inputView.frame = inputViewFrame; } completion:nil]; } } 

你也可以看看这个项目https://github.com/jessesquires/MessagesTableViewController