如何根据 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];
不调用该方法
我是 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];
不调用该方法