【问题标题】:Objective C: Write a function to return the position of the last character in a UILabel?目标C:编写一个函数来返回UILabel中最后一个字符的位置?
【发布时间】:2009-12-27 03:28:13
【问题描述】:

UILabel 的文本在 CGRect(x,y,size,width) 中绘制。标签可以有多行文本。

是否可以编写一个函数来返回这个矩形内的一个 CGPoint 来指定最后一个字符的位置?

我问是因为我试图将 UILabel 的文本包装在任意前缀和后缀中。前缀/后缀需要是单独的标签,以便我可以设置它们的字体、颜色等。找到文本的开头很容易,但至少对我来说,找到文本的结尾很棘手。

【问题讨论】:

标签: iphone objective-c cocoa-touch uikit


【解决方案1】:

也许 UIWebView 可以解决问题。用[webview LoadHTMLString:@"<b>prefix/b>text<b>suffix</b>" baseURL:nil] 填充它。这有点像大锤式的解决方案,但您显然会得到很多其他好处。

【讨论】:

  • 感谢您跳出思维定势。
  • UIWebView 速度慢且不可靠。再加上它像一艘沉没的船一样泄漏。
  • @NathanielSymer:没有任何宗教异议,最终证明手段是正当的。
【解决方案2】:

在 iPhone 上测量文本的主要方法是使用 NSString 的 sizeWithFont:forWidth:lineBreakMode。可以在此基础上做你想做的事,但这需要一些工作。首先,使用您指定的文本特征测量前缀并记住尺寸。然后,计算分词并逐步添加每个单词的测量宽度,必要时换行。最后,测量您的后缀并在您计算的矩形中绘制所有内容。

【讨论】:

    【解决方案3】:

    正如 sbooth 提到的,您可以使用以下内容来获取文本 rect:

    UILabel *label = [UILabel new]; // Or whatever the label happens to be...
    CGSize constraintSize = CGSizeMake(label.frame.size.with-10, MAXFLOAT); // 10 is the total size of the margins. 
    // Replace the 10 with 40 for UITableView usage because of the other subviews
    CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
    

    要获得最后一个字符的点,只需隔离最后一行并获取它的矩形。

    X:获取最后一行的矩形并减去 0.5*(最后一个字符的宽度)
    Y:0.5*labelSize.height

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 2015-07-15
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多