应用转换并设置新的键入属性后,UITextView 被裁剪
UITextView is clipped after applying a transform and setting new typing attributes
我有一个可以缩放和旋转的UITextView
。其文本由用户编辑。文本属性也可以更改,例如文字和背景颜色、字体等
有趣的是,如果我应用缩放变换缩小 视图(例如 0.5),那么它的文本将被剪裁。如果我设置 view.transform
或 view.layer.transform
,行为是相同的。它是由内部 UITextContainerView
引起的,看起来它被缩放了两次,例如如果文本视图缩放 0.5 倍,则 UITextContainerView
具有缩小文本视图的一半大小。 UITextContainerView
的frame
和bounds
的值一样,都是缩小后的文本视图的大小,看起来是正确的。 UITextContainerView
变换及其层的变换是同一性的。
手动更改frame
和bounds
的UITextContainerView
会自动重置因此不起作用。 clipsToBounds
和 masksToBounds
也没有修复剪辑。
这发生在 iOS 11.4 的模拟器和真实设备中。如果我只删除新输入属性的设置,那么 UITextContainerView
会正确运行并且文本不会被剪裁。
这是大小写问题,如果我将其删除,文本将不再被剪裁:
textView.typingAttributes = updatedTypingAttributes
有人遇到过这个错误吗?我该如何解决?
最后,我通过将文本视图包装在另一个 UIView
中修复了这个 OS 错误,并将转换应用于 UIView
而不是内部的文本视图。
通过在我的 UITextView
子类上覆盖 transform
解决了这个问题。不需要 parent UIView
.
override var transform: CGAffineTransform {
didSet {
guard transform != oldValue else { return }
// alternatively, if transform == .identity
if transform.a == 1 {
setNeedsLayout()
layoutIfNeeded()
}
}
}
我有一个可以缩放和旋转的UITextView
。其文本由用户编辑。文本属性也可以更改,例如文字和背景颜色、字体等
有趣的是,如果我应用缩放变换缩小 视图(例如 0.5),那么它的文本将被剪裁。如果我设置 view.transform
或 view.layer.transform
,行为是相同的。它是由内部 UITextContainerView
引起的,看起来它被缩放了两次,例如如果文本视图缩放 0.5 倍,则 UITextContainerView
具有缩小文本视图的一半大小。 UITextContainerView
的frame
和bounds
的值一样,都是缩小后的文本视图的大小,看起来是正确的。 UITextContainerView
变换及其层的变换是同一性的。
手动更改frame
和bounds
的UITextContainerView
会自动重置因此不起作用。 clipsToBounds
和 masksToBounds
也没有修复剪辑。
这发生在 iOS 11.4 的模拟器和真实设备中。如果我只删除新输入属性的设置,那么 UITextContainerView
会正确运行并且文本不会被剪裁。
这是大小写问题,如果我将其删除,文本将不再被剪裁:
textView.typingAttributes = updatedTypingAttributes
有人遇到过这个错误吗?我该如何解决?
最后,我通过将文本视图包装在另一个 UIView
中修复了这个 OS 错误,并将转换应用于 UIView
而不是内部的文本视图。
通过在我的 UITextView
子类上覆盖 transform
解决了这个问题。不需要 parent UIView
.
override var transform: CGAffineTransform {
didSet {
guard transform != oldValue else { return }
// alternatively, if transform == .identity
if transform.a == 1 {
setNeedsLayout()
layoutIfNeeded()
}
}
}