如何判断文本是否超出文本视图的边界?

4
我想了解当文本超出UITextView的边界并需要用户滚动时,该如何判断。知道某种字体将占用多少行是无用的-我如何知道某个文字量将占用多少行?
在上面的图片中,我想添加一个淡入效果,以便我可以优雅地截断文本视图。但是,如果没有足够的文本可以滚动,显示淡入效果看起来不正确。
4个回答

6

在设置文本后获取contentSize。它是一个CGSize,其中height是UITextView显示文本所需的高度,无需滚动。

myTextView.text = someText;
CGSize textSize = myTextView.contentSize;
float verticalSpaceNeededByText = textSize.height;

3

针对 Swift 5.x 进行更新

func textExceedBoundsOf(_ textView: UITextView) -> Bool {
    textView.contentSize.height > self.textView.bounds.height
}

0
获取文本视图的属性文本,并使用此方法计算其大小:
- (CGSize) size;

然后你可以通过了解文本视图的边界和UIFont属性来完成工作:
@property(nonatomic,readonly) CGFloat lineHeight;  

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

0
我编写了一个自定义的 appDelegate 方法,可以在应用程序的多个位置调用它以实现多种用途。这对于确定视图中文本的完美适合高度、自定义单元格高度、具有动态文本数据的表行高度和文本视图等非常方便...
  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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接