Ios 为什么不';这些UITextView中的背景是否清晰?

Ios 为什么不';这些UITextView中的背景是否清晰?,ios,swift,uitextview,subviews,skview,Ios,Swift,Uitextview,Subviews,Skview,我正在尝试以精确的位置显示单个字符,如果将其显示为带紧排的单个字符串,则这些字符将出现。问题是,字符的边界框似乎不透明,因此每个新添加的字符都覆盖了前面的一些字符。当字距较大时(例如,在组合“ToT”中),问题很明显: 我的设置是这样的:我在容器视图中嵌入了一个SKView。在SKView视图控制器的扩展中,在函数中按以下顺序设置: skView.allowsTransparency = true scene.backgroundColor = .clear charAttr – [NSAt

我正在尝试以精确的位置显示单个字符,如果将其显示为带紧排的单个字符串,则这些字符将出现。问题是,字符的边界框似乎不透明,因此每个新添加的字符都覆盖了前面的一些字符。当字距较大时(例如,在组合“ToT”中),问题很明显:

我的设置是这样的:我在容器视图中嵌入了一个SKView。在SKView视图控制器的扩展中,在函数中按以下顺序设置:

skView.allowsTransparency = true
scene.backgroundColor = .clear

charAttr – [NSAttributedStringKey.backgroundColor: UIColor.clear]

textView.isOpaque = false
textView.backgroundColor = UIColor.clear
每个UITextView都会作为子视图依次添加到视图(即SKView)

我已经在我的代码中寻找了一些线索,看看是什么使得角色的边界框看起来不透明,但我没有找到任何线索。可悲的是,去年某个时候我解决了这个问题,但不记得我做了什么,也没有代码了


如果您有任何见解或想法,我们将不胜感激。

在一个操场上实现了人们追求的效果后,我将这个简单的代码粘贴到原始代码所在的扩展中。它仍然有效,所以我尽可能地使它与原作保持一致,直到它也出现问题

SKView和扩展方面是不相关的。问题在于UITextView框架属性如何处理字符宽度。以下是相关代码:

// charInfoArray contains (among other things) an attributed character, its origin,
// its size, and info about whether or not it should be displayed

// For each char, the origin and size info were derived from...
let currentCharRect = layoutManager.boundingRect(forGlyphRange: currentCharRange, in: textContainer)

// To display each (attributed) char of "ToT\n" . . .
for (index, charInfo) in charInfoArray.enumerated() {

    guard charInfo.displayed == true else { continue }

    let textView = UITextView()
    textView.backgroundColor = UIColor.clear
    textView.attributedText = charInfo.attrChar
    textView.textContainerInset = UIEdgeInsets.zero

    // let width = charInfo.size!.width
    let width = 30 // arbitrary width

    // Using the automatically generated charInfo.size!.width here
    // appears to make the text view's background opaque!
    textView.frame = CGRect(origin: charInfo.origin!, 
        size: CGSize(width: width, height: charInfo.size!.height))

    textView.frame = textView.frame.offsetBy(dx: 0.0, dy: offsetToCenterY)
    textView.textContainer.lineFragmentPadding = CGFloat(0.0)
    textView.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0.2)
    textView.textColor = UIColor.black
    view.addSubview(textView)

    print(charInfo.size!.width)
}
将宽度设置为
width=charInfo.size!。宽度
似乎使文本视图的背景不透明!这可能是由于在序列末尾为换行符指定了异常大的宽度造成的。为了消除这个问题,我必须用另一种方式来处理换行符。在任何情况下,我都不知道为什么这会导致文本视图的背景变得不透明,但确实如此。将宽度设置为任意值(例如30)可以消除此问题

以下是分别使用自动生成和手动设置宽度的结果:


半透明的红色区域(黄色背景上)显示每个字符的边界矩形,包括换行符。

如果可以,请共享其余代码。您是否创建了
textView.attributedText
作为
NSAttributedString
。请分享您如何设置
textView
的其余代码。您还应将
charAttr-[
更改为和赋值运算符
charAttr=[
@TheUsage,我刚刚创建了一个变体,它在不正确的代码旁边正常工作。我以前遇到的问题是,因为有太多不相关的代码,我不想发布所有内容。无论如何,我要么发布剩余问题的代码,要么发布解决方案。等等……@修辞,代码和解决方案ion(如果你可以这样称呼的话)在这里。我之前没有发布代码,因为我无法判断许多事情中的哪些可能是罪魁祸首。(关于charAttr行,我只是试图显示相关属性,但我猜等号也会起作用。)