3

我想知道文本何时超出 UITextView 的范围并要求用户滚动。知道某种字体会占用多少行是没有用的——我怎么知道某种文本会占用多少行?

在此处输入图像描述

在上图中,我会添加一个淡入淡出效果,这样我就可以优雅地切断文本视图。但是,如果没有足够的文本滚动,则显示淡入淡出看起来不正确。

4

4 回答 4

4

contentSize设置文本后获取。这是一个 CGSize ,height它将是 UITextView 在不滚动的情况下显示文本所需的高度。

myTextView.text = someText;
CGSize textSize = myTextView.contentSize;
float verticalSpaceNeededByText = textSize.height;
于 2012-12-21T02:10:45.423 回答
2

为 Swift 3.x 更新

func textExceedBoundsOf(_ textView: UITextView) -> Bool {
    let textHeight = textView.contentSize.height
    return textHeight > self.textView.bounds.height
}
于 2017-05-27T03:15:24.117 回答
0

获取文本视图的属性文本并使用以下方法计算大小:

- (CGSize) size;

然后你可以知道文本视图的边界和这个 UIFont 的属性来完成这项工作:

@property(nonatomic,readonly) CGFloat lineHeight;  

请注意,属性字符串的大小仅对长度有用,因为它认为文本在同一行。它不考虑行之间的空间。

于 2012-12-21T01:26:28.733 回答
0

我编写了一个自定义的 appDelegate 方法,我可以在应用程序的多个位置调用该方法以实现多种用途。方便确定高度以完美适合视图中的文本、自定义单元格高度、具有动态文本数据的表格行高以及 textViews 等...


  1. 它非常灵活,您可以轻松确定任何文本需要在屏幕、容器或视图中完全显示的“感知”高度。

  2. 获得结果后,您可以将其与 textView 高度的大小进行比较,如...。

  3. 请记住,TextView 的高度和 TextView 的 textContainer 高度之间有一点缓冲。非常小,但您可以通过发送比您的 (TextView.frame.size.height -3) 略小的 MinHeight 来进行调整。

  4. 如果您还需要它,您还可以使用可选的填充在其他尺寸上给自己一个小缓冲,这将返回一个更大的容器。

  5. 如果您使用自定义字体,请使用新变量进行补偿并考虑到这一点,但按原样,这对系统字体非常有用。


示例逻辑:

//Logic Example:
if([appDelegate calculateTextHeight:@"Your_String_Passed_In_Here"] > textView.frame.size.height) {

    //Text will exceed Height of TextView and require scroll.

}else {
    //Text is within the TextView without need to scroll. 
}

方法:

-(NSInteger)calculateTextHeight:(NSString *)text:(NSInteger)FontSize:(NSInteger)MaxWidth:(NSInteger)MinHeight:(NSInteger)optionalHeightPadding {

    //Determine the Size based on the Inputs:
    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FontSize] constrainedToSize:CGSizeMake(MaxWidth, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping];

    //Add Optional Padding:
    int calH = size.height + optionalHeightPadding;

    //Determine if larger than Min:
    if (calH > MinHeight) {
        return size.height + optionalHeightPadding;
    }

    //Return Min
    return MinHeight;
}

注意提醒: 我曾经使用UILineBreakModeWordWrap,但它在 iOS 6 中已被弃用,请改用NSLineBreakByWordWrapping

于 2012-12-21T02:00:14.033 回答