我希望在某些条件下更改view
中单元格内cellForRowAtIndexPath
的x位置框架。我使用了以下代码。但它不会改变视图的x position
帧。
- (void)viewDidLoad {
[super viewDidLoad];
UINib *nib = [UINib nibWithNibName:@"GoalDetailsCustomCardCell" bundle:nil];
[goalDetailsTableView registerNib:nib forCellReuseIdentifier:@"CardCell"];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
GoalDetailsTableViewCell *cell = [goalDetailsTableView dequeueReusableCellWithIdentifier:@"CardCell"];
if(cell == nil)
{
cell = [goalDetailsTableView dequeueReusableCellWithIdentifier:@"CardCell"];
}
NSLog(@"%f", cell.cardDetails.frame.origin.x);
[UIView animateWithDuration: 0.5 animations:^{
cell.cardDetails.frame = CGRectOffset(cell.cardDetails.frame, -322.0, 0.0);
// CGRectOffset(cell.cardView.frame, -320.0, 0.0);
cell.actionCardReminder.frame = CGRectOffset(cell.actionCardReminder.frame, -322.0, 0.0);
}];
NSLog(@"%f", cell.cardDetails.frame.origin.x);
return cell;
}
单元格中的视图按预期移动但不是负面移动。它仍然显示cardDetails视图而不是actionCardReminder视图。
注意:NSLog将视图框显示为更改x位置,但视图未移动到-322.0位置。
答案 0 :(得分:1)
由于iOS布局渲染过程,您的自定义UITableViewCell的layoutSubviews可能会多次调用。在您的情况下,您可以更改GoalDetailsTableViewCell类的layoutSubviews方法中的项目框架。
@implementation GoalDetailsTableViewCell
-(void)layoutSubviews
{
[super layoutSubviews];
[UIView animateWithDuration: 0.5 animations:^{
cell.cardDetails.frame = CGRectOffset(cell.cardDetails.frame, -322.0, 0.0);
// CGRectOffset(cell.cardView.frame, -320.0, 0.0);
cell.actionCardReminder.frame = CGRectOffset(cell.actionCardReminder.frame, -322.0, 0.0);
}];
NSLog(@"%f", cell.cardDetails.frame.origin.x);
}
@end
答案 1 :(得分:-1)
请勿在{{1}}中更改框架尝试在cellForRowAtIndexPath
方法