【问题标题】:iOS 7 UITextView - layoutSubviews infinite loopiOS 7 UITextView - layoutSubviews 无限循环
【发布时间】:2013-10-29 12:09:33
【问题描述】:

我有 UITextView:

textView = [[UITextView alloc] init];
textView.scrollEnabled = NO;

我只有在 iOS7 上有问题:

在每次键盘击键时,layoutSubviews 都会在 superview 上调用。写了几个字就卡在死循环里,不停地调用layoutSubviews

当我删除 textView.scrollEnabled = NO; 代码行时,一切都按照预期的方式运行。

我真的很想在我的文本视图上禁用滚动。有人知道怎么做吗?

【问题讨论】:

  • 你在你的课堂上覆盖 layoutSubviews 吗?
  • 没有。我只是重写它来证明我的怀疑并将调用委托给 super。这个问题很可能与这个问题有关:stackoverflow.com/questions/18991001/…

标签: ios7 uitextview autolayout layoutsubviews


【解决方案1】:

最后我通过在 UITextView 上放置一个 Pan Gesture 来破解整个事情。这样,编辑文本视图的所有功能都被保留,滚动被禁用。 当我想禁用文本视图的滚动时,我没有设置scrollEnabled = NO。相反,我在 UITextView 上添加了 Pan Gesture 识别器。当我想启用滚动时,我只是从文本视图中删除了相同的平移手势识别器。

像这样:

初始化方法...

    _scrollDisablerGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(textViewScrollAction:)];
// method textViewScrollAction does nothing, empty implementation
    [_textView addGestureRecognizer:_scrollDisablerGR];

代码中的其他地方:

if (shouldEnableScrolling) {
        [self.textView removeGestureRecognizer:_scrollDisablerGR];
    } else {
        if (!_scrollDisablerGR.view) {
            [self.textView addGestureRecognizer:_scrollDisablerGR];
        }
    }

效果很好;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多