self-sizing使用情况下,我再uitableViewCell里通过auto layout布局了一个uilabel:
self.tempLabel = [UILabel new]; self.tempLabel.numberOfLines = 3; self.tempLabel.lineBreakMode = NSLineBreakByCharWrapping; [self.contentView addSubview:self.tempLabel]; [self.tempLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self.contentView); }];
正常情况下,Label会根据文字的量会自动换行,然后cell的高度也会跟着适应。但是现在我手动更改Label的高度:
- (void)load{ [self.tempLabel mas_remakeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self.contentView); make.height.equalTo(@100); }]; }
在Controller里的调用代码如下:
- (void)doLeftButtonAction{ [self.tableView beginUpdates]; [self.cell load]; [self.tableView endUpdates]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return 1; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ self.cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; self.cell.tempLabel.text = @"哈哈"; return self.cell; }
这种情况下编译器会提示:
现在我想问:我手动改变控件的约束,如何让cell跟着改变?
你去看一下你用的AutoLayout库的API,可以把约束存下来,修改constant. 你写OC。如果是Swift对应的SnapKit是可以保留下constraint的,在修改对应的值,然后再reload一下cell就行了