【问题标题】:Scrolling to range in UITextView滚动到 UITextView 中的范围
【发布时间】:2009-07-27 20:20:54
【问题描述】:

我有一个带有文本的UITextView,我希望能够滚动它,使给定的文本NSRange 位于视图的顶部。使用scrollRangeToVisible: 不起作用:它将滚动范围,使其位于视图中的某个位置,不一定是我想要的位置。如何滚动以使 UITextView 中的特定 NSRange 文本恰好位于顶部?

感谢您的任何建议。

【问题讨论】:

    标签: objective-c iphone cocoa cocoa-touch


    【解决方案1】:

    想到的唯一答案是自己计算 contentOffset。使用 NSString -sizeWithFont:forWidth:lineBreakMode: sizeWithFont:constrainedToSize:lineBreakMode: 计算出您想要的文本正上方的框的大小(如果文本不必开始行,这可能会很棘手;您可能必须尝试几个范围以找到导致高度跳跃的范围)。这应该为您提供 UIScrollView -setContentOffset:animated: 所需的 contentOffset。我有点担心性能,可能有必要创建自己的 UITextView 实现以提高效率(如果它是静态内容,这应该不难)。

    它不像我想要的那样优雅,但 UITextView 并没有给你很多对布局引擎的访问权限。

    【讨论】:

    • 非常感谢您的回答。我会继续尝试。 Apple 没有让 UITextView 在更广泛的情况下更实用,这真的很愚蠢。
    • 如果将其与 NSTextView 进行比较,您可以看到 Apple 从根本上简化了布局引擎。当他们进行这种更改时,他们通常会在制定细节时将大部分功能保留为少数版本的私有。一旦他们公开了一个接口,他们必须至少通过一个弃用周期来支持它,如果他们对接口不是很满意,那么他们希望能够更改它而不必管理它。一开始它给我们的东西更少,但这意味着 Cocoa 的流失率往往比 .NET 少,因为 .NET 的接口发生了根本性的变化。
    • Rob,我不太明白你的回答。乔纳森,对你有帮助吗?我了解如何使用 UIKitAdditions 来计算全文占用的框架,但是如何获得该框架中布局的给定文本范围的坐标位置?这里缺少什么步骤?
    • 另外,如果是多行文本,sizeWithFont:constrainedToSize:lineBreakMode:计算布局文本大小的更好方法不是吗?
    • @BillyGray,你是对的;我不知道为什么我最初写了单行版本。但关键是要计算出你想要的文本块的大小。这将告诉您向下滚动多远。
    猜你喜欢
    • 1970-01-01
    • 2018-05-11
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2013-05-17
    相关资源
    最近更新 更多