【发布时间】:2015-07-08 13:33:11
【问题描述】:
我正在尝试使用内容大小来实现不断增长的 UITextView,我正在使用 this class 和自动布局,效果很好,但我的问题是我的 内部滚动视图 没有滚动。
在viewDidLoad中添加增长文本视图的方法之前是滚动的。
这就是我的 xib 中的内容:
- 查看
- 外滚动视图
- innerScrollView
- 标签
- 不断增长的 UITextView
- innerScrollView
- 外滚动视图
我这样做是为了在滚动视图之间切换滚动
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
if([scrollView isEqual:self.innerScrollview]){
self.outerScrollview.scrollEnabled = NO;
self.innerScrollview.scrollEnabled = YES;
}
else{
self.outerScrollview.scrollEnabled = YES;
self.innerScrollview.scrollEnabled = NO;
}
}
在 viewDidLoad 中,“msg”是不断增长的文本视图:
self.msgHandler = [[GrowingTextViewHandler alloc]initWithTextView:self.msg withHeightConstraint:self.msgHeight];
[self.msgHandler updateMinimumNumberOfLines:1 andMaximumNumberOfLine:INT_MAX];
并在 textViewDidChange
- (void)textViewDidChange:(UITextView *)textView {
[self.msgHandler resizeTextViewWithAnimation:YES];
}
那么为什么不断增长的文本会影响内部滚动视图的滚动?
int outerContentHeight = self.outer_last_label.frame.size.height + self.outer_last_label.frame.origin.y;
int innerContentHeight = self.inner_last_label.frame.size.height + self.inner_last_label.frame.origin.y;
[self.outerSrollview setContentSize:CGSizeMake([[UIScreen mainScreen] bounds].size.width,outerContentHeight)];
[self.innerScrollview setContentSize:CGSizeMake(self.scrollview2.frame.size.width, innerContentHeight)];
我已经设法修复它,但我删除了“GrowingTextViewHandler”类的使用,而是这样做了
我将“scrollViewDidScroll”更改为:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
if([scrollView isEqual:self.innerScrollview]){
[self.view insertSubview:self.innerScrollview atIndex:0];
}
else{
[self.view insertSubview:self.outerScrollview atIndex:0];
}
}
并将“textViewDidChange”更改为此
- (void)textViewDidChange:(UITextView *)textView {
float height = self.msg.contentSize.height;
[UITextView beginAnimations:nil context:nil];
[UITextView setAnimationDuration:0.5];
self.msgHeightConstraint.constant = height + 10.0; //Give it some padding
[UITextView commitAnimations];
}
【问题讨论】:
-
不需要增加文本视图。
-
只增长文本视图直到你的视图高度。可以理解的是,如果你的文本字段增长这么多,那么滚动需要什么,只有当你的文本大于 textview 的高度时,它才会起作用。
-
@ArpitParekh innerScrollView 与它们都在 outerScrollView 中的不断增长的文本无关。内部的有一个固定的高度(100)并且有自己的标签,我需要为它们滚动一些
-
你能发一张图吗?指向您正在调用的内容、内部滚动视图和其他内容。
-
TextView 是 UIScrollView 的子类,因此当文本大于文本视图的高度时,文本视图具有内置的滚动功能。
标签: ios objective-c uiscrollview autolayout uitextview