2017-07-05 2 views
0

Ich arbeite mit iOS8 Self-Sizing-Zelle und ich möchte die Zelle Größe anpassen, um seine subview, messageBodyButton und profileImageView.
profileImageView 's Größe ist festgelegt. Wie Sie auf dem Bild unten sehen können, passt sich die messageBodyButton nicht an ihre titleLabel an.UIButton passt die Größe nicht an, um den titelLabel zu passen

Warum ist das passiert? Wie behebt man diesen Fehler mit Auto Layout?
Und wenn der Inhalt titleLabel geändert (sagen wir, die Daten des Modells geändert), wie sollte ich Constraints aktualisieren, so dass die Höhe der Zelle korrekt berechnet werden kann?

pic

Hier ist mein Code:

RXTChatCell.m:

@property (nonatomic, strong) UILabel *timeLabel; 
@property (nonatomic, strong) UIImageView *profileImageView; 
@property (nonatomic, strong) UIButton *messageBodyButton; 

@property (nonatomic, assign) BOOL needUpdateConstraints; 
@property (nonatomic, assign) BOOL didSetUpConstraints; 

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     _timeLabel = [[UILabel alloc] init]; 
     _timeLabel.text = @"19:00"; 
     [self.contentView addSubview:_timeLabel]; 

     _profileImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"placeholder"]]; 
     [self.contentView addSubview:_profileImageView]; 

     _messageBodyButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [_messageBodyButton.titleLabel setLineBreakMode:NSLineBreakByTruncatingTail]; 
     [_messageBodyButton.titleLabel setTextAlignment:NSTextAlignmentRight]; 
     _messageBodyButton.titleLabel.numberOfLines = 0; 
     _messageBodyButton.titleLabel.backgroundColor = UIColor.grayColor; 
     [self.contentView addSubview:_messageBodyButton]; 

     _timeLabel.backgroundColor = UIColor.redColor; 
     _profileImageView.backgroundColor = UIColor.greenColor; 
     _messageBodyButton.backgroundColor = UIColor.blueColor; 
     self.contentView.backgroundColor = UIColor.orangeColor; 
    } 
    return self; 
} 

- (void)updateConstraints 
{ 
    if (!self.didSetUpConstraints) { // set up constraints 
     [_timeLabel makeConstraints:^(MASConstraintMaker *make) { 
      make.top.equalTo(self.contentView.topMargin); 
      make.centerX.equalTo(self.contentView); 
     }]; 

     [_profileImageView makeConstraints:^(MASConstraintMaker *make) { 
      make.top.equalTo(_timeLabel.bottom).offset(10); 
      make.right.equalTo(self.contentView).offset(-10); 
      make.width.and.height.equalTo(50); 
      make.bottom.lessThanOrEqualTo(self.contentView.bottomMargin); 
     }]; 

     [_messageBodyButton makeConstraints:^(MASConstraintMaker *make) { 
      make.top.equalTo(_profileImageView); 
      make.right.equalTo(_profileImageView.left).offset(-10); 
      make.left.equalTo(self.contentView).offset(10); 
      make.bottom.lessThanOrEqualTo(self.contentView.bottomMargin); 
     }]; 
     self.didSetUpConstraints = YES; 
    } 

    if (self.needUpdateConstraints){ 
     // here, how should I update constraints? 

    } 

    [super updateConstraints]; 
} 

- (void)setMessage:(RXTChatMessage *)message 
{ 
    EMTextMessageBody *body = (EMTextMessageBody *)message.messageBody.body; 
    [self.messageBodyButton setTitle:body.text forState:UIControlStateNormal]; 
    self.needUpdateConstraints = YES; 
    [self setNeedsUpdateConstraints]; 
} 

RXTChatViewController.m:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
    self.tableView.estimatedRowHeight = 44; 
    self.tableView.rowHeight = UITableViewAutomaticDimension; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    RXTChatMessage *message = self.messages[indexPath.row]; 
    RXTChatCell *cell = [tableView dequeueReusableCellWithIdentifier:RXTChatCellId]; 
    if (cell == nil) { 
     cell = [[self alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:RXTChatCellId]; 
    } 
    cell.message = message; 

    return cell; 
} 
+3

Code anzeigen -> Hilfe bekommen -> Sieg – quinz

+0

Bitte aktualisieren Sie die Frage mit 'CODE' –

+0

auch Einschränkungen zeigen Ihnen für Ihre Zelle Subviews angewendet. – D4ttatraya

Antwort

0
  1. wählen Button -> in den Editor gehen -> Größe passend zum Inhalt.
  2. Entfernen Sie feste Höhenbeschränkung für Ihre Schaltfläche (nur festlegen, führende, nachfolgende, obere untere) Einschränkung (Superview sollte Ihre Zelle Ansicht sein).
  3. Dies sollte Ihr Problem

lassen Sie mich lösen wissen, ob es das Problem löst.

]

+0

Sorry Mann Ich arbeite nicht mit Interface Builder, und ich habe versucht, '[self.messageBodyButton sizeToFit];' in 'layoutSubviews' hinzuzufügen, aber es hat nicht funktioniert. – PeteRuan

+0

@PeteRuan: Nun, Sie beginnen besser damit, oder alle Ihre Apps werden wie folgt aussehen) PS. Sie haben keine Einschränkungen angegeben. Empfehlen Sie, einen Abend zu verbringen und jetzt lernen, sie in IB zu verwenden, wird dies mit Faktor x100 in den nächsten paar Monaten zurückzahlen, wenn Sie wieder in iOS-Apps arbeiten. –

+0

@Umka: Danke Mann, ich werde beginnen mit IB so schnell wie möglich. – PeteRuan

Verwandte Themen