根据内容的大小调整文本标签的大小

时间:2016-01-19 04:44:20

标签: ios swift uitableview label

我已阅读过有关此主题的多篇帖子:UILabel - auto-size label to fit text?Swift - Adjusting fontSize to fit the width of the layout (programmatically)http://www.raywenderlich.com/87975/dynamic-table-view-cell-height-ios-8-swift。似乎我正在关注这些帖子的建议,但似乎不起作用。 以下是我的模拟器显示的内容: enter image description here

我已正确设置约束,我想并且我写了以下内容:

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.rowHeight = UITableViewAutomaticDimension
    tableView.estimatedRowHeight = 150

}

我写道:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CathyTaskLogTableViewCell

        cell.messageLabel.sizeToFit()
        cell.messageLabel.text = "If you'd like to have more control over the way objects are synced, you can keep them in the local datastore until you are ready to save them yourself using saveInBackground. To manage the set of objects that need to be saved, you can again use a label. The fromPinWithName: method on PFQuery makes it easy to fetch just the objects you care about."

        return cell
    }

我已将行lines设置为0,如下所示:

enter image description here

对于label,我设置了所有四个约束以及宽度和高度约束。我的约束就是这样:

enter image description here

然而,它并没有导致我的所有行显示。对于如何解决这个问题,有任何的建议吗?非常感谢你提前!!!

7 个答案:

答案 0 :(得分:1)

你应该删除标签的高度,并从标签底部添加新的约束到tableview ..这可能会解决你的问题。因为如果你添加标签的约束高度,那么它将修复你的标签的高度,如果你放置底部约束然后无论你的内容多少,它都会从底部固定像素高度。

答案 1 :(得分:0)

在tableview中使用自定义单元格然后根据字母数量增加高度约束它肯定会起作用,因为我们遇到了一些问题。

答案 2 :(得分:0)

使用下面的代码根据文本

自动调整标签
    NSString * test=@"this is test this is test inthis is test ininthis is";

testLabel.text = test;
testLabel.numberOfLines = 0;
[testLabel sizeToFit];
[testLabel setLineBreakMode:UILineBreakModeWordWrap];

答案 3 :(得分:0)

use this it is working for  me


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
   data=@[@"123454",@"122",@"thi is subbareddy",@"This is subbs reddy working as software employee trying to test dynamic heighjt for sa label"];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;

}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [data count];
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *cellIdentifier=@"Cell";
    CustomTableViewCell * Cell=(CustomTableViewCell*)[self.tblView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (Cell==nil) {
        NSArray *nib=[[NSBundle mainBundle]loadNibNamed:@"CustomTableViewCell" owner:self options:nil];
        Cell=[nib objectAtIndex:0];
    }
    UILabel *lblLoadId=(UILabel *)[Cell viewWithTag:1];

    lblLoadId.text=[data objectAtIndex:indexPath.row];
    lblLoadId.numberOfLines=0;
    CGFloat rowHeight = [self heightForText:lblLoadId.text];
    lblLoadId.frame = CGRectMake(0, 0, 300, rowHeight);


    return Cell;
}



- (CGFloat)heightForText:(NSString *)bodyText
{
    UIFont *cellFont = [UIFont systemFontOfSize:17];
    CGSize constraintSize = CGSizeMake(300, MAXFLOAT);
    CGSize labelSize = [bodyText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
    CGFloat height = labelSize.height + 50;
    NSLog(@"height=%f", height);
    return height;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSString *labelText =[data objectAtIndex:indexPath.row];
    return [self heightForText:labelText];
    //return 100;
}

答案 4 :(得分:0)

还有另一个选项,首先映射Height约束的出口,然后在UITableView的heightForRow委托方法中,计算文本的高度,然后返回计算出的高度加上另一个UIElements高度,这些高度正在单元格上用作标签我可以在模拟器的单元格中看到日期和时间,然后在cellForRow方法中再次计算文本的高度并将该高度分配给高度约束的映射对象,最后更新标签的约束,如[your label updateConstraints],我希望它能够正常工作。 / p>

答案 5 :(得分:0)

这是Objective-C解决方案。

首先,在constraints UILabel设置的身高值为> =任意值(示例设置身高约束> = 44)时,请参阅附图。 Auto increment label constraints

在控制器中添加以下方法以获取字符串文本的height

- (CGSize)getHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font {
CGSize size = CGSizeZero;
if (text) {
    CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font } context:nil];
    size = CGSizeMake(frame.size.width, frame.size.height);
}
return size;

}

在上述方法中,font只不过是您用于标签的字体。

覆盖tableview的heightForRowAtIndexPath,如下所示,

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    return [self getHeightForText:[self.valuesArray objectAtIndex:indexPath.row] havingWidth:323.0f andFont:[UIFont fontWithName:@"Helvetica" size:18.0f]].height;

}

cellForRowAtIndexPath方法中,以正常方式将文字设置为标签。此标签将根据文本大小自动展开;

答案 6 :(得分:0)

如果要在默认表格视图单元格中添加自定义标签,请使用此标签。

我们要解决的问题。

enter image description here

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     
     if var cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell") {

       self.customCellLabelTitle = {
                    let lbl = UILabel(frame: CGRect(x: 90, y: cell.textLabel?.frame.origin.y ?? 2, width: self.tblView.frame.size.width - 90, height: 40))
                    lbl.translatesAutoresizingMaskIntoConstraints = false
                    lbl.numberOfLines = 0
                    lbl.setContentCompressionResistancePriority(.required, for: .horizontal)
                    lbl.backgroundColor = .clear
                    lbl.text = "cell text value"
                    lbl.adjustsFontSizeToFitWidth = true
                    lbl.minimumScaleFactor = 0.01
                    return lbl
                }()

}
 

输出:

enter image description here