【问题标题】:growing UITextView disabling UIScrollView不断增长的 UITextView 禁用 UIScrollView
【发布时间】:2015-07-08 13:33:11
【问题描述】:

我正在尝试使用内容大小来实现不断增长的 UITextView,我正在使用 this class 和自动布局,效果很好,但我的问题是我的 内部滚动视图 没有滚动。

在viewDidLoad中添加增长文本视图的方法之前是滚动的。

这就是我的 xib 中的内容:

  • 查看
    • 外滚动视图
      • innerScrollView
        • 标签
      • 不断增长的 UITextView

我这样做是为了在滚动视图之间切换滚动

-(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


【解决方案1】:

请设置滚动视图的内容大小,不要更改代码中的任何内容,并检查,

  [self.scrollViewOuter setContentSize:CGSizeMake(200, 1000)];
    [self.scrollViewInner setContentSize:CGSizeMake(200, 1000)];

如果我在其中添加内容大小,我的两个滚动视图都可以工作。

【讨论】:

  • 其实这是最主要的,你必须设置滚动视图工作。
  • 在我的 xib 中:视图:--> outerScrollView --> 视图:--> innerScrollView 和不断增长的文本视图
  • 我这样设置我的内容大小 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)];
  • 我把它放在 viewDidLoad 中并删除了旧的,但仍然是 innerScrollView 不滚动外部它就像它像任何其他标签一样被对待:[self.outerScrollview setContentSize:CGSizeMake(3000,40000) ]; [self.innerScrollview.setContentSize:CGSizeMake(100,400000)];
  • 谢谢,但我设法解决了它,不确定我正在做的是否正确,但它的工作方式就像我想要的那样......检查我的编辑,无论如何谢谢你:)
猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多