How to make UILabel / UITableViewCell to have a dynamic height

I recently found out, that even though according to the documentation sizeToFit on a UILabel will take into account the numberOfLines property, it simply doesn't.

You have seen variable heights of UITableViewCell in iPhone applications like App Store, Address Book, SMS and so on. These applications have a UITableView as main part, but each cell in the table has a variable height according to text amount it holds.

With UITableView it is quite different if you're coming from a HTML world, as UITableView cannot generate a dynamic height automatically , you'll need to calculate the height yourself before you set the delegate.

How to make UILabel / UITableViewCell to have a dynamic height

After you created a UITableView , you will need to set a delegate and a datasource . There is a UITableViewDelegate method to tell UITableView how tall a cell would be:

  1. -( CGFloat )tableView:( UITableView *)tableView
  2. heightForRowAtIndexPath:(NSIndexPath *)indexPath;

If you want UITableViewCell to have a dynmic height, you'll need to calculate the height of text block and return the result in the method I mentioned above.

There are four NSString methods that can do the calculations:

  1. -( CGSize )sizeWithFont:( UIFont *)fontconstrainedToSize:( CGSize )size;
  2. -(CGSize )sizeWithFont:( UIFont *)fontconstrainedToSize:( CGSize )size
  3. lineBreakMode:(UILineBreakMode )lineBreakMode;
  4. -(CGSize )sizeWithFont:( UIFont *)fontforWidth:( CGFloat )width
  5. lineBreakMode:(UILineBreakMode )lineBreakMode;
  6. -(CGSize )sizeWithFont:( UIFont *)font
  7. minFontSize:(CGFloat )minFontSize
  8. actualFontSize:(CGFloat *)actualFontSize
  9. forWidth:(CGFloat )width
  10. lineBreakMode:(UILineBreakMode )lineBreakMode;

To calculate the exact height of a text block, you'll need to specify a large CGSize and those methods will return you exact size, here's an example:

  1. CGSize aSize;
  2. aSize=[aStringsizeWithFont:[UIFont systemFontOfSize:14]
  3. constrainedToSize:CGSizeMake (300.0,1000.0)
  4. lineBreakMode:UILineBreakModeTailTruncation ];

Then you can get the height by accessing aSize.height .

What I'm doing most of the time is to call one of those methods in the model class when setting the string and storing the height in the model class, so you can use the correct height right away.

Now to size the UILabel and/or UITableViewCell you just need to set the frame property of UILabel and/or UITableViewCell .

你可能感兴趣的:(html)