Adjusting the positions of the labels in a UITable

2019-02-03 00:54发布

I'm using a UITableViewCell with UITableViewCellStyleSubtitle. However, because of the background image I'm using for the cell, I don't like where the detailTextLabel is going. I want to move it and resize it within the cell, but nothing I try seems to work.

CGRect currRect = cell.detailTextLabel.frame;
cell.detailTextLabel.frame = CGRectMake(currRect.origin.x + 20, currRect.origin.y, currRect.size.width - 40, currRect.size.height);

I tried putting this code into both tableView:cellForRowAtIndexPath and tableView:willDisplayCell:forRowAtIndexPath methods, but neither works. The label simply stays where it is, and the same size.

Adjustment of other properties of the label (textAlignment, backgroundColor, and, of course, the text itself) works correctly.

How to I get the detailTextLabel to move where I need to?

In case this matters (though I don't see why it should), this particular cell also has imageView.image and backgroundImage properties set. Both images display correctly.

4条回答
倾城 Initia
2楼-- · 2019-02-03 01:16

Or, you can change the cell from UITableViewCellStyleSubtitle, to the default and add your own objects to cell.contentView and place them where you want. You don't necessarily need to subclass UITableViewCell (e.g. custom cell) or use layoutSubViews. It can all be done in tableView:cellForRowAtIndexPath.

查看更多
地球回转人心会变
3楼-- · 2019-02-03 01:17

You could probably do this with a CGAffineTransform. The (untested) code to push the detailTextLabel right 10 pixels would look roughly like:

CGAffineTransform translate = CGAffineTransformMakeTranslation(10.0, 0.0); 
[detailTextLabel setTransform:translate];

While you can do this, I think you'll be happier creating your own custom UITableViewCell.

查看更多
在下西门庆
4楼-- · 2019-02-03 01:26

You'll want a custom UITableViewCell subclass that overrides layoutSubviews to do the dirty work of laying out whatever subviews are in there. Calling super then adjusting the detailTextLabel.frame is probably the easiest thing to do.

查看更多
SAY GOODBYE
5楼-- · 2019-02-03 01:32

You could try and adjust the label with the indentation and indentation level:

cell.indentationWidth = MY_DESIRED_WIDTH;
cell.indentationLevel = 1;

(for unindented cells)

Or for indented cells just do:

cell.indentationLevel = cell.indentationLevel + 1;

Both these should shift/indent your labels.

查看更多
登录 后发表回答