UITextView中的大文本被切断,这是UIScrollView内部

sud*_*udo 57 iphone uiscrollview uitextview ios

我有一个严重的问题,我似乎无法修复,这让我在过去两天疯狂.我已经搜索了很多,我找不到解决方案,即使我尝试了很多.

我有一个UITextView内部UIScrollView.我能够动态调整UITextViewscrollview内部的大小来显示文本.但是当UITextView包含非常大的文本时,当我几乎滚动到最后时它会被切断.但是,UIScrollView框架的尺寸仍然正确.

我看了这些帖子: 和许多类似的报告.

UIScrollviewUITextview均在厦门国际银行使用自动版式创建.

这是我当前的代码和截图,因为您可以看到屏幕截图中的空白点应填充文本.请帮忙.

在此输入图像描述

- (void)viewDidAppear:(BOOL)animated
{
    CGRect frame = self.longDescField.frame;
    frame.size.height = self.longDescField.contentSize.height;
    self.longDescField.frame = frame;

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width,  self.longDescField.contentSize.height + 200);
    self.scrollView.scrollEnabled = YES;
    [self.scrollView flashScrollIndicators];
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*ike 131

此问题自iOS 7以来就已存在,并且仍然存在于iOS 12中.

但是,scrollEnabled = NO正如@igz推荐的那样,我无法通过在调整大小之前进行设置来保持正常的滚动行为.相反,我调整了滚动onoff调整大小后

// Resize text view here

textView.scrollEnabled = NO;
textView.scrollEnabled = YES;
Run Code Online (Sandbox Code Playgroud)

这迫使剪切文本正确呈现.

  • 适用于iOS9.1.不敢相信Apple没有解决这个问题.它看起来很古老. (6认同)
  • 不能相信这个bug仍然存在于iOS 9.2.1上(应用程序是使用Xcode 7.2.1构建的) (2认同)

sud*_*udo 15

谢谢大家的帮助.这最终是在iOS7中为我工作的结果.

我不得不为这个特殊的xib 禁用自动布局.

然后做了以下事情:

[textView setScrollEnabled:YES];
[textView setText:text];
[textView sizeToFit];
[textView setScrollEnabled:NO];
Run Code Online (Sandbox Code Playgroud)

  • 只需设置scrollEnabled:NO为我做了. (5认同)

med*_*eda 11

对我来说,解决方案是sizeToFit在自定义textView之后

[self.yourTextView sizeToFit];
Run Code Online (Sandbox Code Playgroud)

这应该是您在操作textview时所做的最后一件事,不应该在填充内容文本之前.


K1w*_*eek 7

绝对是iOS7.我有同样的问题适用于所有调整大小的UITextViews,生成xib和代码.我发现在更改UITextView框架后需要调整textContainer.size.

我创建了这个类别代码来调整textContainer.size,但是在设置文本值之后似乎也需要调整,所以如果没有设置框架大小,我必须在任何文本更改后调用adjustAfterFrameChange.这段代码假设UITextView没有对setFrame执行任何操作:本身取出setFrame:并且如果你想避免这种风险,请手动调用adjustAfterFrameChange

编辑:已更改

self.textContainer.size = self.frame.size; // fix for cut off text
Run Code Online (Sandbox Code Playgroud)

self.textContainer.size = self.contentSize; // fix for cut off text
Run Code Online (Sandbox Code Playgroud)
@interface UITextView(Extras)

- (void)adjustAfterFrameChange;

@end



@implementation UITextView(Extras)

- (void)adjustAfterFrameChange {
#if defined(__IPHONE_7_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0
    if ([self respondsToSelector:@selector(textContainer)])
        self.textContainer.size = self.contentSize; // fix for cut off text
#endif
}


- (void)setFrame:(CGRect)frame {
    [super setFrame:frame];

    [self adjustAfterFrameChange];
}

@end
Run Code Online (Sandbox Code Playgroud)


zed*_*hao 5

试试这个

[self.textView setContentInset:UIEdgeInsetsMake(-8.0, 0, -8.0, 0)];
Run Code Online (Sandbox Code Playgroud)

它适用于UITextView中的剪切文本显示.


小智 5

我有一个类似的问题,其中长文本在调整文本视图的大小后被切断.在调整大小之前关闭scrollingEnabled似乎解决了它.当然看起来像IOS 7的bug.


Aru*_*nGJ 5

可以通过将连续的布局属性设置为false来解决此问题。

textView.layoutManager.allowsNonContiguousLayout = false
Run Code Online (Sandbox Code Playgroud)

尽管文档说默认值是false,但实际上对于UITextView它将其设置为true。