应用转换并设置新的键入属性后,UITextView被裁剪

时间:2018-08-02 12:04:34

标签: ios uitextview clip

我有一个UITextView,可以缩放和旋转它。其文本由用户编辑。文字属性也可以更改,例如文字和背景颜色,字体等。

现在好笑的是,如果我应用了一个缩小视图的缩放变换(例如0.5),则会剪切其文本。如果我设置view.transformview.layer.transform,则行为是相同的。它是由内部UITextContainerView引起的,该内部UITextContainerView看起来像缩放了两倍,如果文本视图缩放为0.5倍,则frame的大小为缩小后的文本视图的一半。 bounds的{​​{1}}和UITextContainerView具有相同的值,它是缩小的文本视图的大小,看起来是正确的。 UITextContainerView变换及其层的变换是身份。

enter image description here

手动重置frame中的boundsUITextContainerView会自动重置,因此不起作用。此外,clipsToBoundsmasksToBounds不能解决裁剪问题。

这发生在iOS 11.4的模拟器和真实设备中。如果仅删除新的键入属性的设置,则UITextContainerView的行为将正确,并且文本不会被剪切。

这是大小写问题,如果我删除它,则该文本不再被剪切:

textView.typingAttributes = updatedTypingAttributes

有人碰到这个错误吗?我该怎么解决?

2 个答案:

答案 0 :(得分:0)

最后,我通过将文本视图包装在另一个UIView中并将此转换应用于UIView而不是其中的textview来解决了该操作系统错误。

答案 1 :(得分:0)

通过在我的transform子类上覆盖UITextView解决了该问题。不需要父母UIView

override var transform: CGAffineTransform {
    didSet {
        guard transform != oldValue else { return }

        // alternatively, if transform == .identity
        if transform.a == 1 {
            setNeedsLayout()
            layoutIfNeeded()
        }
    }
}