我试图关注WWCD 2014会话226,它介绍了使用自动布局在iOS 8中实现自我调整单元格的方法,它只是不能正常工作。
HHTableViewCell.h
#import <UIKit/UIKit.h>
@interface HHTableViewCell : UITableViewCell
@property (strong, nonatomic)UILabel *title;
@end
HHTableViewCell.m
#import "HHTableViewCell.h"
@implementation HHTableViewCell
@synthesize title = _title;
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// configure control(s)
#pragma mark -- title Lable
_title = [[UILabel alloc] initWithFrame:CGRectInset(self.bounds, 15.0, 0.0)];
_title.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
_title.numberOfLines = 0;
[self.contentView addSubview:_title];
#pragma mark -- constraints
NSMutableArray *constraints = [[NSMutableArray alloc]init];
UIView *contentView = self.contentView;
[constraints addObject:[NSLayoutConstraint
constraintWithItem:_title
attribute:NSLayoutAttributeFirstBaseline
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeTop
multiplier:1.8
constant:3.0]];
[constraints addObject:[NSLayoutConstraint
constraintWithItem:_title
attribute:NSLayoutAttributeFirstBaseline
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeTop
multiplier:1.8
constant:3.0]];
[constraints addObject:[NSLayoutConstraint
constraintWithItem:_title
attribute:NSLayoutAttributeFirstBaseline
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeTop
multiplier:1.8
constant:3.0]];
[constraints addObject:[NSLayoutConstraint
constraintWithItem:contentView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationGreaterThanOrEqual
toItem:nil
attribute:0
multiplier:1.0
constant:44.0]];
[constraints addObjectsFromArray:[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-15-[_title]-15-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(_title)]];
[self.contentView addConstraints:constraints];
}
return self;
}
@end
MMTableViewController.h
#import <UIKit/UIKit.h>
@interface MMTableViewController : UITableViewController
@end
MMTableViewController.m
#import "MMTableViewController.h"
#import "HHTableViewCell.h"
@interface MMTableViewController ()
@end
@implementation MMTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.tableView registerClass:[HHTableViewCell class] forCellReuseIdentifier:@"HiCell"];
[self.tableView registerClass:[HHTableViewCell class] forCellReuseIdentifier:@"HCell"];
self.tableView.estimatedRowHeight = 44.0;
self.tableView.rowHeight = UITableViewAutomaticDimension;
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
#warning Potentially incomplete method implementation.
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
#warning Incomplete method implementation.
// Return the number of rows in the section.
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"HiCell";
HHTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
cell.title.text = @"Hello Apple. Hello Apple. Hello Apple. Hello Apple. Hello Apple. Hello Apple. Hello Apple. Hello Apple. Hello Apple. Hello Apple. Hello Apple. Hello Apple. Hello Apple. ";
// Configure the cell...
NSLog(cell.title.text);
return cell;
}
@end
单元格具有固定的高度并包裹两行文本。看起来像这样:
你好Apple。你好Apple。你好Apple。你好
Aplle。你好Apple。你好Apple。你好Apple ...
以编程方式添加约束和子视图。
Simulator在Xcode 6.3.1中运行iOS 8.3。
答案 0 :(得分:1)
要让UILabel使用约束,查看Apple's documentation,我认为您需要设置preferredMaxLayoutWidth
属性:
此属性会影响布局约束时标签的大小 适用于它。在布局期间,如果文本超出宽度 由此属性指定,附加文本将流向一个或 更多新线,从而增加标签的高度。
但是,除非您需要某些特定的单元格自定义,否则可以使用默认的UITableViewCell,并在提供的numberOfLines = 0
上设置titleLabel
。它可以与UITableViewAutomaticDimension
一起使用,但我只与heightForRowAtIndexPath:
一起测试。
<强>更新强>:
根据我所学到的知识,您还需要将estimatedRowHeight
设置为viewDidLoad
中的某些内容(该值甚至不需要准确/重要)。
Here is a working example使用默认的UITableViewCells: