【问题标题】:UITextView textContainer exclusion path not working when it's middle of view controllerUITextView textContainer 排除路径在视图控制器中间时不起作用
【发布时间】:2014-10-16 14:23:24
【问题描述】:

我的 UIView 在视图控制器的中间,我正在设置排除路径如下

    -(void) viewDidLayoutSubviews
    {
      UIBezierPath *exludedPath = [UIBezierPath bezierPathWithRect:aRect];
      self.textView.textContainer.exclusionPaths = @[excludedPath];
    }

这里 aRect 与 UITextView 具有相同的 x 和 y 以及合理的高度和宽度

当我的 UITextView 位于视图控制器的顶部时,此代码确实有效,但当它位于视图控制器中间的某个位置时则无效。

是 viewController 的生命周期问题吗?还是导致这种情况的视图控制器的某些属性?

【问题讨论】:

  • 为了帮助回答这个问题,您应该为aRecttextView.frame 提供调试值。您能否提供显示不正确文本流的图像?一个小问题:textView 在父 UIView 中,而不是在 UIViewController 中。 UIViewController 不是可见对象。它在布局中没有尺寸,所以中间不能有任何东西。
  • 快速尝试:因为NSTextContainer 是关于布局的,可能会将您的代码移动到viewWillLayoutSubviews。布局应在调用viewDidLayoutSubviews 时完成。也许当textView 位于其父视图的顶部时,它只是因为巧合而看起来正确,但您的代码永远不会产生效果,因为它是在视图布局结束后调用的。

标签: ios ios7 uitextview uibezierpath


【解决方案1】:

仔细检查 excludePath 的 rect,并确保它确实包含在 textViewContainer.size 中;我遇到了一个类似的错误,最后我通过检查修复了它。

【讨论】:

    【解决方案2】:

    对于查看此问题的任何人,我都遇到了同样的问题,并发现 rect 不正确。假设您的图像视图的矩形是 (20, 30, 50, 50),而文本视图的矩形是 (20, 30, 300, 400)。贝塞尔路径的矩形应该是 (0,0,50,50),而不是 (20, 30, 50, 50)。也就是说,通过边界而不是实际帧。

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 2014-03-19
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      相关资源
      最近更新 更多