1

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


セルの高さは固定で、2 行のテキストが折り返されています。次のように表示されます:

こんにちは、アップル。こんにちはアップル。こんにちはアップル。こんにちは
、アプレです。こんにちはアップル。こんにちはアップル。Hello Apple...


制約とサブビューはプログラムで追加されます。シミュレーターは、Xcode 6.3.1 で iOS 8.3 を実行しています。

4

1 に答える 1