【发布时间】:2018-01-03 14:11:38
【问题描述】:
我有一个UITextView,上面有一个UIImageView。我有文本视图将其文本包裹在图像周围(在视图控制器中):
override func viewDidLayoutSubviews() {
let imageBezierPath = UIBezierPath(rect: imageRect)
overviewTextView.textContainer.exclusionPaths = [imageBezierPath]
}
这可以很好地包装文本,但问题是:我在 UIStackView 中有文本视图(下面的 lorem ipsum),禁用了滚动,我在它下面有项目(“下面的标签”)。我希望它的高度随着它的包裹而扩大,但事实并非如此。我在设置exclusionPaths 属性之前和之后打印了文本视图的contentSize.height,但没有看到任何变化。
你可以在 lorem ipsum 的底部看到我放了一些英文以便更容易看出文本视图被截断了。
这是UITextView 的预期行为吗?我该怎么做才能更新contentSize,或者手动计算文本现在占用了多少空间?
更新
在@DonMag 的帮助下,我制作了一个游乐场来重现该问题。当您点击按钮以切换排除路径时,文本不会按应有的方式换行。
https://gist.github.com/abbeycode/b40ade1f23a8946a12ad816e1bc0f2b1
【问题讨论】:
-
嗯...对我来说似乎工作正常。这是一个可以放入 Playground 页面的示例:gist.github.com/DonMag/e79e40f23fd034921cbdbbca2e584b49 ...如果您点击按钮,它将打印文本视图的
.contentSize。更改imageRect的高度(代码中的第 32 行)似乎可以正确更改包装和.contentSize。 -
@DonMag 谢谢,这非常有帮助。看起来我的问题必须与我设置的约束有关(或者它位于滚动视图内的堆栈视图内)。当我知道更多时,我会更好地找出问题所在并更新问题。
-
@DonMag 我想可能是因为我使用了Interface Builder,而操场在
viewDidLoad中设置了约束。试试我修改后的游乐场:gist.github.com/abbeycode/b40ade1f23a8946a12ad816e1bc0f2b1 ... 点击按钮切换换行,我看到了相同的行为。我尝试强制重新布局,但没有帮助 -
Dov - 看起来很奇怪。当您设置
exclusionPaths时,文本视图似乎没有收到“您需要更改某些内容”消息。不知道这是否是一个错误,或者我只是不知道打电话的正确方式。如果您愿意,这是一种解决方法 - 这是您的确切要点,我只是在您更改exclusionPaths后添加了几行“清除和替换文本” - 似乎有效:gist.github.com/DonMag/a97de9749f5915615e8a286aac5e3ec4
标签: ios autolayout uitextview