UITextContainerView 仅在以大于 45° 的角度旋转时才调整为他的 UITextView 超级视图的大小

Posted

技术标签:

【中文标题】UITextContainerView 仅在以大于 45° 的角度旋转时才调整为他的 UITextView 超级视图的大小【英文标题】:UITextContainerView not resizing as his UITextView superview, only when rotated with an angle grater than 45° 【发布时间】:2018-07-24 14:46:13 【问题描述】:

我有一个 UITextView,它可以同时通过捏合和旋转手势调整大小。 为了调整它的大小,我在捏合手势处理函数中调用函数 textViewDidChange(),而发送者状态是 .changed 类型,并且在增加文本视图的字体大小之后。

函数如下:

func textViewDidChange(_ textView: UITextView) 

    textView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude))
    let newSize = textView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude))
    var newFrame = textView.bounds

    newFrame.size = CGSize(width: newSize.width, height: newSize.height)

    textView.bounds = newFrame


问题是当我以大于 45 度的角度旋转文本视图时,文本视图的文本正在裁剪。使用 Debug View Hierarchy,我注意到 Text View 的 UITextContainerView 的宽度比它的 superview 小。

Debug View Hierarchy screen红色矩形是Text View,高亮的是它的UITextContainerView。

文本视图的大小调整正确,但 UITextContainerView 不正确。 我不明白为什么会这样,有人可以帮助我吗?

[有一个指向 YouTube 视频的链接,但它已被删除,因此该链接已被删除。]

【问题讨论】:

能录屏吗? @Farhad 我刚刚添加了一个屏幕记录示例 【参考方案1】:

在 textView 上禁用滚动。 这会根据 contentSize 自动增加 textView 的高度。

textView.isScrollEnabled = false

【讨论】:

我已经完成了。 textView 通过代码添加到视图中,而不是使用 Storyboard,isScrollEnabled = false。我认为问题在于宽度而不是高度,我也尝试将 contentSize 设置为 textView 的大小,然后使用 layoutIfNeeded(),但没有结果。 是的,您必须指定正确的框架来放置您的 textView,即 Origin 和 Size。然后设置 isScrollEnabled = false 就可以了。您不需要做任何其他事情,例如:在 textViewDidChange 委托方法中调整高度。此外,您不必更改 textView 的宽度,您必须使用 textView.textContainer.contentHeight 调整高度 你能举个小例子吗?我只有旋转有这个问题。添加新行正确增加高度并使用捏合手势调整 textView 的大小(线性增加宽度和高度以适应新字体大小,而不是仅增加高度)【参考方案2】:

在我的情况下,当我在另一个视图隐藏后更新 textview 的高度约束时会发生这种情况。我使用

    self.viewSearchResults.isHidden = true
    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) 
        self.constraintTextViewsHeight.constant = 100
    

问题已解决。

【讨论】:

以上是关于UITextContainerView 仅在以大于 45° 的角度旋转时才调整为他的 UITextView 超级视图的大小的主要内容,如果未能解决你的问题,请参考以下文章

PHPUnit:如何仅在以 Test 结尾的类中运行测试?

Wordpress 前端仅在以管理员身份登录时有效

VM:_UITextContainerView (CALayer) - 内存峰值

仅在以非交互方式运行 bash 脚本时出现错误“cat: write error: Broken pipe”

Facebook iOS SDK:应用程序在以“未找到符号:_ACFacebookAppIdKey”开始后立即崩溃。仅在 iOS 5 中

iOS UITextView自适应高度UITextContainerView抖动问题