具有边缘到边缘排除路径的 UiTextView 导致所有文本消失

Posted

技术标签:

【中文标题】具有边缘到边缘排除路径的 UiTextView 导致所有文本消失【英文标题】:UiTextView with edge to edge exclusion path cause all the text to disappear 【发布时间】:2014-02-25 08:42:40 【问题描述】:

我有一个UITextView,我想给它添加一个自定义的UIView,并让文本像这样上下流动:

+----------------+
|------txt-------|
|                |
|     UIView     |   
|                |
|------txt-------|
|----------------|
|----------------|
+----------------+

我试图通过添加一个具有UITextView 宽度和UIView 高度的排除路径来实现这一点,如下所示:

CGRect exclusionFrame=CGRectMake(0, 
                                CGRectGetMinY(element.frame),
                                self.textView.textContainer.size.width,
                                CGRectGetHeight(element.frame)); 
self.textView.textContainer.exclusionPaths=@[[UIBezierPath bezierPathWithRect:exclusionFrame]];

但由于某种原因,如果排除路径的宽度等于 textView 的宽度,UIView(又名element)下方的所有文本都会消失。当我将排除路径的宽度减一时,文本会在 UiView 旁边出现一个字母列,如下所示:

+----------------+
|------txt-------|
|a               |
|d     UIView    |   
|e               |
|------txt-------|
|----------------|
|----------------|
+----------------+

为什么我不能创建一个边缘到边缘的排除路径,有没有办法解决这个困境?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,幸运的是我只是放入 \n\r\n\r 来解决它。作弊我知道,但它有效。

【讨论】:

这也是我现在的解决方案。没有更好的办法吗?【参考方案2】:

它最终成为故事板。我只将 UiTextView 从视图中取出并以编程方式对其进行了初始化,这似乎解决了问题:

-(void) viewDidLoad
    self.textView=[[UITextView alloc] init];
    self.textView.translatesAutoresizingMaskIntoConstraints=NO;
    [self.view addSubview:self.textView];

    NSDictionary* views = @@"textView": self.textView;
    NSArray* vContrains=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-50-[textView]-50-|" options:NSLayoutFormatAlignAllLeft metrics:nil views:views];
    NSArray* hContrains=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[textView]-50-|" options:NSLayoutFormatAlignAllLeft metrics:nil views:views];
    [self.view addConstraints:vContrains];
    [self.view addConstraints:hContrains];

 

【讨论】:

【参考方案3】:

textView.textContainer.lineFragmentPadding = 0 textView.textContainerInset = UIEdgeInsetsZero textView.contentInset = UIEdgeInsetsZero 可能会有帮助。

【讨论】:

【参考方案4】:

我用 swift 解决了一个类似的问题,解决方案是在使用 switch 和 objective-c 示例阅读不同的线程后得到的。

我有一个带有Scrolling Enabled = true 的 UITextView。 没有滚动,我没有问题,但我需要这个功能。

    我使用了标准设置,滚动启用 = true
let path = UIBezierPath(rect: myview.frame)
textView.textContainer.exclusionPaths = [path]
self.textView.addSubview(myview)
    当我更改 UITextView 文本时禁用滚动
func setText( message: String ) 
    textView.isScrollEnabled = false
    textView.text = message
    textView.isScrollEnabled = true

这解决了我的问题。我希望它有所帮助。

【讨论】:

以上是关于具有边缘到边缘排除路径的 UiTextView 导致所有文本消失的主要内容,如果未能解决你的问题,请参考以下文章

带有剪切路径的 imagemagick 锯齿边缘

UITextView textContainer排除路径在视图控制器的中间时不起作用

裁剪以排除参差不齐的边缘上的任何透明度

是否可以创建具有弯曲底部边缘的 UIView。

思维导图canny滤波 原理步骤细致剖析

向上滚动时动态设置 UITextView 排除路径会导致无限循环