English 中文(简体)
动态可变性 观点小组
原标题:Dynamic UITableView Cell Height Based on Contents

我有一份<代码>可调频密码,该编码与习惯细胞(从>可调用的ViewCell)相聚,每个单元都有一个<代码> UIWebView,根据其内容自动转成。 在这里,我如何能够改变<编码>可读密码的电池的高度,其内容是(可变的<代码>webView)。

The solution must be dynamic since the HTML used to populate the UIWebViews is parsed from an ever changing feed.

我感到有必要使用<代码>可调取的<>编码>代用法<代码>>。

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ;//This needs to be variable
}

我可以进入囚室或装物。 我能否改变该囚室在<代码>上的位置。

任何帮助都是巨大的。 感谢。

Note

我在两年前提出了这一问题。 随着汽车布局的推移,可以找到最佳解决办法:

Using Auto Layout in UITableView for dynamic cell layouts & variable row heights

该功能在SDK中建立。

最佳回答

我为生机身高找到的最佳方式是先计算高空,以某种方式储存高高(可能是一阵列)。 假设电池主要含有文字,你可使用<代码>-[NSString smallWithFont:constraining ToSize:lineBreakMode:]计算高度,然后将相应数值退回

如果内容不断改变,如果提供新数据,你可以采用一种更新高度的方法。

问题回答

这通常非常好:

目标C:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewAutomaticDimension;
}

快速:

override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
    return UITableViewAutomaticDimension;
}
self.tblVIew.estimatedRowHeight = 500.0; // put max you expect here.
self.tblVIew.rowHeight = UITableViewAutomaticDimension;

我尝试了许多解决办法,但一个朋友建议的解决办法是:

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

    int height = [StringUtils findHeightForText:yourLabel havingWidth:yourWidth andFont:[UIFont systemFontOfSize:17.0f]];

    height += [StringUtils findHeightForText:yourOtherLabel havingWidth:yourWidth andFont:[UIFont systemFontOfSize:14.0f]];

    return height + CELL_SIZE_WITHOUT_LABELS; //important to know the size of your custom cell without the height of the variable labels
}

“StingUtils.h”类:

#import <Foundation/Foundation.h>

@interface StringUtils : NSObject

+ (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font;

@end

StringUtils.m:

#import "StringUtils.h"

@implementation StringUtils

+ (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font {
    CGFloat result = font.pointSize+4;
    if (text) {
        CGSize size;

        CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX)
                                          options:NSStringDrawingUsesLineFragmentOrigin
                                       attributes:@{NSFontAttributeName:font}
                                          context:nil];
        size = CGSizeMake(frame.size.width, frame.size.height+1);
        result = MAX(size.height, result); //At least one row
    }
    return result;
}

@end

它为我做了完美的工作。 我有一个有3个固定尺寸的图像、2个固定尺寸的标签和2个变式标签的定制单元。

位于SOS的有活力的囚室存在一个大问题,那就是,在囚室被抽走之前,桌上必须计算并恢复每个囚室的高度。 但是,在抽取囚室之前,囚室没有 frame子,因此没有宽松。 如果贵单位要根据文体中的文本数量来改变其高度,那就会造成问题,因为你不知道其血缘。

我看到的一个共同解决办法是,人们确定细胞宽度的数值。 这是一种坏的做法,因为表格可以是简单明了的或分类的,可以使用SOS 7或OS 6 搭配,以一个Pi或iPad,在地貌或海峡等地展示。

I struggled with these issues in an iOS app of mine, which supports iOS5+ and both iPhone and iPad with multiple orientations. I needed a convenient way to automate this and leave the logic out of the view controller. The result became a UITableViewController sub class (so that it can hold state) that supports default cells (Default and Subtitle style) as well as custom cells.

可在Gite Hub()上 gr取。 我希望这能帮助那些仍与这一问题作斗争的人。 如果你去除,我会爱听你的想法,如果你为你工作的话。

在这里,我使用的是动态细胞高度的代码,即从tw头 f起,然后将其储存在核心数据中,供脱线阅读。

这不仅表明如何获得电池和数据内容,而且表明如何动态地将一台自动装置与含有婚 the的内容相容。

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

    Tweet *tweet = [self.fetchedResultsController objectAtIndexPath:indexPath];

    NSString* text = tweet.Text;

    TweetTableViewCell *cell = (TweetTableViewCell*)[self tableView:tableView cellForRowAtIndexPath:indexPath];

    //Set the maximum size
    CGSize maximumLabelSize = cell.tweetLabel.frame.size;
    CGPoint originalLocation = cell.tweetLabel.frame.origin;

    //Calculate the new size based on the text
    CGSize expectedLabelSize = [text sizeWithFont:cell.tweetLabel.font constrainedToSize:maximumLabelSize lineBreakMode:cell.tweetLabel.lineBreakMode];


    //Dynamically figure out the padding for the cell
    CGFloat topPadding = cell.tweetLabel.frame.origin.y - cell.frame.origin.y;


    CGFloat bottomOfLabel = cell.tweetLabel.frame.origin.y + cell.tweetLabel.frame.size.height;
    CGFloat bottomPadding = cell.frame.size.height - bottomOfLabel;


    CGFloat padding = topPadding + bottomPadding;


    CGFloat topPaddingForImage = cell.profileImage.frame.origin.y - cell.frame.origin.y;
    CGFloat minimumHeight = cell.profileImage.frame.size.height + topPaddingForImage + bottomPadding;

    //adjust to the new size
    cell.tweetLabel.frame = CGRectMake(originalLocation.x, originalLocation.y, cell.tweetLabel.frame.size.width, expectedLabelSize.height);


    CGFloat cellHeight = expectedLabelSize.height + padding;

    if (cellHeight < minimumHeight) {

        cellHeight = minimumHeight;
    }

    return cellHeight;
}

并且认为这种算法将适合你:

(1) 电池组 • 引导您启动关于装货的网上调查,并给他们贴上指数。

2) 在网上电文中,你计算了电池内容的高度,并组成了一个字典,其关键和价值类似:主要=指数Path.row值=高

3) 回顾[一览表

4)在[表象室:指数Path]为相应的牢房设置了适当的高位。

这是我的 solution。 它为我工作。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.textLabel.text = [_nameArray objectAtIndex:indexPath.row];
    cell.textLabel.numberOfLines = 0;
    cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewAutomaticDimension;
}

我们需要实施这些改变。

1)cell.textLabel.numberOfLines = 0;
  cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;

2)return UITableViewAutomaticDimension;

快速4+

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableView.automaticDimension
}

我总是在我所有的囚室里以超级囚室为单位实施这一规定,因为出于某种原因,<编码>可调用的电文/密码>就没有很好地发挥作用。

-(CGFloat)cellHeightWithData:(id)data{
    CGFloat height = [[self contentView] systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
    [self fillCellWithData:data]; //set the label s text or anything that may affect the size of the cell
    [self layoutIfNeeded];
    height = [[self contentView] systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
    return height+1; //must add one because of the cell separator
}

更正应在本文件印发之日后一星期内送交正式记录编辑科科长(DC1-603室)。 观望重 ForRowAtIndexPath:NSIndexPath *)indexPath using a dummy cell.

说明:这项工作只进行自动处理,但也与第7期及以后一起工作。

pd: 不要忘记检查西比或故事板上的检查箱,以“指面目”,并固定宽度(见cmd + alt + 5 menu)。

Swift Use custom cell and labels. Set up the constrains for the UILabel. (top, left, bottom, right) Set lines of the UILabel to 0

在“观点”方法中添加以下代码:

tableView.estimatedRowHeight = 68.0
tableView.rowHeight = UITableViewAutomaticDimension

/ 代表和办公室;数据来源

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension;
}

我在“国际劳工联合会”中进行了大量测试。 首先是不工作,然后是按以下类别划分,直线高度。

- (CGFloat)heightStringWithEmojifontType:(UIFont *)uiFont ForWidth:(CGFloat)width {

// Get text
CFMutableAttributedStringRef attrString = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0);
CFAttributedStringReplaceString (attrString, CFRangeMake(0, 0), (CFStringRef) self );
CFIndex stringLength = CFStringGetLength((CFStringRef) attrString);

// Change font
CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef) uiFont.fontName, uiFont.pointSize, NULL);
CFAttributedStringSetAttribute(attrString, CFRangeMake(0, stringLength), kCTFontAttributeName, ctFont);

// Calc the size
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString);
CFRange fitRange;
CGSize frameSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, 0), NULL, CGSizeMake(width, CGFLOAT_MAX), &fitRange);

CFRelease(ctFont);
CFRelease(framesetter);
CFRelease(attrString);

return frameSize.height + 10;}




相关问题
List Contents of Directory in a UITableView

I am trying to list the contents of Ringtones directory in a TableView, however, I am only getting the last file in the directory in ALL cells, instead of file per cell. This is my code: - (...

iPhone NSUserDefaults persistance difficulty

In my app i have a bunch of data i store in the NSUserdefaults. This information consists of an NSObject (Object1) with NSStrings and NSNumbers and also 2 instances of yet another object (Object2). ...

Writing a masked image to disk as a PNG file

Basically I m downloading images off of a webserver and then caching them to the disk, but before I do so I want to mask them. I m using the masking code everyone seems to point at which can be found ...

Resize UIImage with aspect ratio?

I m using this code to resize an image on the iPhone: CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0); UIGraphicsBeginImageContext(screenRect.size); [value drawInRect:screenRect blendMode:...

Allowing interaction with a UIView under another UIView

Is there a simple way of allowing interaction with a button in a UIView that lies under another UIView - where there are no actual objects from the top UIView on top of the button? For instance, ...

热门标签