【问题标题】:How to find out when UILabel wordwraps如何找出 UILabel wordwraps 的时间
【发布时间】:2013-02-14 01:48:47
【问题描述】:

我为我的tableViewController 创建了几个不同的UITableViewCells,这是因为我有不同的数据位要显示,具体取决于返回的内容。因此,每个UITableViewCell 的高度都不同。

这一切都很好,但是我的一个UILabels 必须显示一个大的NSString,大到我不得不将它换行到第二行,这里唯一的问题是它弄乱了我的UITableViewCell 格式化。

我的问题是,当UILabel 收到NSString 必须使用 wordrap 因为NSString 的大小太长时,是否可以标记或捕获某种类型的操作?

或者有没有办法计算NSString 的物理长度(不是字符串中有多少个字符),所以我可以决定嘿我需要重新格式化我的UITableViewCell..

任何帮助将不胜感激。

【问题讨论】:

    标签: ios uitableview nsstring uilabel


    【解决方案1】:

    通常的方法是使用 sizeWithFont:constrainedToSize:lineBreakMode: 来获取字符串的大小。你可以这样使用它:

    CGSize stringSize = [theString sizeWithFont:[UIFont fontWithName:@"Helvetica Neue" size:12] constrainedToSize:CGSizeMake(320, 3000) lineBreakMode:NSLineBreakByWordWrapping ];
    

    这是为表格单元格的整个宽度设置的,但您可能希望使用标签的宽度。

    【讨论】:

    • 算了。我明白了。大声笑我认为由于某种原因它正在返回一个字符串,但我看到它的类型为 CGSize 我只是比较我的 UILable 的宽度......
    • 网站iOS Fonts 非常适合确定您要使用的内置字体并获取您需要在sizeWithFont: 方法中使用的字体名称。
    【解决方案2】:

    我不知道我是否理解得很好,但你有你的 tableviewcell 的高度吗?并且您可能在 UITextView 中有一个 NSString,并且 textview 的内容高度高于 tableviewcell。好吧,你应该首先计算 UITextview 的内容,添加到一个列表中,当 heightforRowAtindexPath 被调用时,你应该计算新的高度(内容 textview)加上一些东西......并且要解决最大长度,你应该计算字符的限制或限制对于线..

    一些有用的代码:

    //resize height with content of UITextView
    CGRect frame = _textView.frame;
    frame.size.height = _textView.contentSize.height;
    _textView.frame = frame;
    
    //delegate textview to calculate limit for text.
    - (void)textViewDidChange:(UITextView *)textView{
    
    NSInteger restrictedLength=140;
    
    NSString *temp=textView.text;
    
    if([[textView text] length] > restrictedLength){
        textView.text=[temp substringToIndex:[temp length]-1];
    }
    

    }

    请记住,您需要在调用 heightforRowAtIndexPath 之前从 UITextview 计算限制/大小内容。当它调用时,您已经需要知道单元格的最大高度。

    【讨论】:

    • 对不起,如果我解释得不够好。我在 Interface Builder 中有三个不同的 UITableViewCell,它们的样式根据接收到的信息而有所不同。如果我传递给其中一个 UILabel 的 NSString 足够长可以换行,我将制作另一个。然后,我会将带有双线 UILabel 的新 UITableViewCell 合并到我的项目中,作为新的 UITableviewCell。所以我唯一需要做的就是捕捉 NSString 的物理长度是否会绕到第二行,然后我只需定义要使用的 tableviewcell ......我希望这是有道理的。
    • 没问题。但是为什么要使用 UILabel 而不是 UITextView?计算 textview 的高度大小,然后你可以获得多少行,如下所示: numLines = textView.contentSize.height/textView.font.lineHeight;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多