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

vojdkbi0  于 2023-06-25  发布在  iOS
关注(0)|答案(5)|浏览(139)

我有一个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)下面的所有文本就会消失。当我将排除路径的宽度减少1时,文本会出现在UiView旁边,其中包含一个字母的列,如下所示:

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

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

x759pob2

x759pob21#

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

ih99xse1

ih99xse12#

最后变成了故事板。我只从视图中取出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];

}
ffscu2ro

ffscu2ro3#

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

enyaitl3

enyaitl34#

我用swift解决了一个类似的问题,解决方案是在阅读了一个不同的线程和objective-c的例子之后。
我有一个带有Scrolling Enabled = true的UITextView。没有滚动,我没有问题,但我需要这个功能。
1.我使用了标准设置,scrolling enable = true

let path = UIBezierPath(rect: myview.frame)
textView.textContainer.exclusionPaths = [path]
self.textView.addSubview(myview)

1.并且在更改UITextView文本时禁用滚动

func setText( message: String ) {
    textView.isScrollEnabled = false
    textView.text = message
    textView.isScrollEnabled = true
}

这解决了我的问题。希望能帮上忙。

c2e8gylq

c2e8gylq5#

如果有人在未来遇到这种情况:
我有一个类似的错误,我的文字消失时,使用排除路径。我可以通过使用TextKit1而不是TextKit2来修复它:

let useTextKit2 = false
let textView = UITextView(usingTextLayoutManager: useTextKit2)

但是,我无法修复单词被分割成独立于lineBreakMode的单个字符的错误。这似乎是TextKit的一个潜在错误。即使在苹果WWDC 2022的最新示例代码中,仍然会出现此错误:
Link to Apple's documentation on enriching text in text views

相关问题