如何根据 ios 中的设备宽度换行到下一行

how to break line to next line depending on device width in ios

我是 ios 的新手,我正在学习使用自定义单元格的 tableView,我已经成功地为此编写了代码,但现在我遇到了一个问题,我正在设置标题文本的标签被剪切了设备宽度的右侧,如果用设备 width.can 切割,我希望该文本出现在下一行 width.can 谁能告诉我?

我的代码如下 代码

  UILabel *titleLbl = (UILabel *)[cell viewWithTag:102];

   CGRect frame = self.titleLbl.frame;
    frame.size.height = [self getHeightforController:self.titleLbl];
    self.titleLbl.frame = frame;


    titleLbl.text = str;

这里的 durationtxt 是一个很长的字符串,它的右边截断了。

UIKit Framework Reference 将成为您最好的朋友。这里是 link 到 UILabel Class Reference.

您将需要设置 durationLbl.lineBreakMode = UILineBreakModeWordWrap,如果需要还可以设置 durationLbl.numberOfLines。 0 表示任意行数,是默认值。

在您需要所有设备的动态高度时使用此功能

- (CGFloat)getHeightforController:(id)view{
UILabel *tempView =(UILabel *)view;
NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
context.minimumScaleFactor = 0.8;

float width = tempView.frame.size.width;

width = width * ([[UIScreen mainScreen] bounds].size.width/320);

CGSize size=[tempView.text boundingRectWithSize:CGSizeMake(tempView.frame.size.width, 200)
                                        options:NSStringDrawingUsesLineFragmentOrigin
                                     attributes:@{ NSFontAttributeName : tempView.font}
                                        context:context].size;
return size.height;
}

它会 return 您需要标签的高度并像这样调用此方法:

CGRect frame = self.yourlbl.frame;
frame.size.height = [self getHeightforController:self.yourlbl];
self.yourlbl.frame = frame;

解决了..

更新您的代码:UILabel *titleLbl = (UILabel *)[cell viewWithTag:102]; titleLble.text = str CGRect frame = titleLbl.frame; frame.size.height = [self getHeightforController:titleLbl]; titleLbl.frame = frame;'

您收到此错误是因为 titleLbl 是您单元格的对象而不是您的 ViewController。请不要忘记在调用该方法之前设置文本

请尝试一下:

lbl.numberOfLines = 0;
lbl.text = str;
[sizeToFit];

不调用该方法