使用UITextView防止自动换行

时间:2010-02-04 16:22:29

标签: iphone uitextfield

使用Iphone sdk 3.1.2

我有一个UITextView控件,启用了垂直和水平滚动。我想要显示每行文本而不包装,以便用户可以水平滚动查看它。我的问题是,即使启用了水平滚动,文本也会在iphone屏幕的宽度处包裹,即320像素。

如何防止包裹?

由于

7 个答案:

答案 0 :(得分:5)

  

使用sizeWithFont:从NSString UIKit中添加每行的宽度,然后将UITextView的contentSize属性设置为略宽于最长行的宽度。

尝试此策略时遇到问题,在将字符串分配给UITextView的文本属性时会出现问题。在赋值时,UITextView将设置其contentSize.width以匹配视图的宽度,并且它将在指定的文本字符串中插入换行符以将其包装到该宽度。在分配uitextview.text之后,您可以将contentSize.width设置为最长行的长度,这会在滚动视图中提供额外的空间,但新行会阻止文本填充新空间。

如果在将文本加载到视图之前设置了contentsize.width,则只需在加载文本时重置contentSize。

我尝试在加载前增加文本视图的帧大小,这样可以让你的长行在屏幕边缘上运行。但是,您无法滚动,并且在缩小框架大小的那一刻,文本的换行符重新修改并再次调整contentSize。如果在视图中输入任何文本,则会出现相同的情况。

好吧,我确信uitextviews在这一点上根本不具备或不打算用于水平滚动。我没有看到如何在另一个滚动视图中嵌入文本视图也可以缓解这种情况。只需要在HTML中执行...

答案 1 :(得分:3)

解决方案是关闭UITextView本身的所有滚动选项,然后将其嵌入另一个UIScrollView中。您可以通过在谷歌中搜索“DualScrollTextView”一词来获得实际代码。

答案 2 :(得分:3)

我遇到了类似的问题。这是我使用自动布局的解决方案。

  1. 将您的UITextView放在scrollView中。粘贴文本视图的边框以滚动视图的边框。

  2. 使用两个IBOutlet作为UITextView的宽度和高度。我叫他们" heightConstraint"和" widthConstraint"

  3. 在视图控制器中使用以下代码:

    - (void)viewWillLayoutSubviews {
        CGSize fit = [self.textView sizeThatFits:CGSizeMake(10000, 10000)];
        self.widthConstraint.constant = fit.width;
        self.heightConstraint.constant = fit.height;
    }
    
  4. 我发现你可以要求UITextView计算适合的大小,而不是自己计算每一行的长度

答案 3 :(得分:1)

我认为你很难将UITextfield放在scrollview中。

答案 4 :(得分:0)

Woot我明白了。

我在.xib上将UITextView宽度设置为500。 在我的代码上,我设置了 myUITextView.text = @"一些包含许多行的巨大字符串&#34 ;;

然后我开始了 myUITextView.contentSize = CGSizeMake(600,myUITextView.contentSize.height);

当然你可以使用你想要的任何宽度;只要确保后者更大。

答案 5 :(得分:0)

永远让我知道我的数据中有\ n。因此,这毕竟不是包装!万一这发生在您身上:

self.titleText.text = viewModel.title.replacingOccurrences(of: "\n", with: "");

答案 6 :(得分:0)

textView.textContainer.lineBreakMode = .byTruncatingTail
textView.textContainer.maximumNumberOfLines = 1