我创建了一个应用,其中我有一个tableview
。我想在某些条件下移动view
所以我更改了约束,它的工作正常但是当我再次尝试更改约束时,view
不会被移动。
我的代码如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UINib *nib = [UINib nibWithNibName:@"GoalDetailsCustomCardCell" bundle:nil];
[goalDetailsTableView registerNib:nib forCellReuseIdentifier:@"CardCell"];
GoalDetailsTableViewCell *cell = [goalDetailsTableView dequeueReusableCellWithIdentifier:@"CardCell"];
if(cell == nil)
{
cell = [goalDetailsTableView dequeueReusableCellWithIdentifier:@"CardCell"];
}
if([self.swipedRowArray containsObject:indexPath])
{
NSLog(@"%f", cell.cardDetails.frame.origin.x);
NSLog(@"%f", cell.cardDetails.frame.size.width);
NSLog(@"%f", cell.cardDetails.frame.size.height);
cell.cardDetails.translatesAutoresizingMaskIntoConstraints = NO;
NSDictionary *contentDictionary = @{@"cardDetails":cell.cardDetails, @"actionReminderCard":cell.actionCardReminder};
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(-314)-[cardDetails]" options:0 metrics:nil views:contentDictionary]];
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[actionReminderCard]" options:0 metrics:nil views:contentDictionary]];
NSLog(@"%f", cell.cardDetails.frame.size.width);
NSLog(@"%f", cell.cardDetails.frame.size.height);
}
else
{
NSLog(@"%f", cell.cardDetails.frame.origin.x);
NSLog(@"%f", cell.cardDetails.frame.size.width);
NSLog(@"%f", cell.cardDetails.frame.size.height);
cell.cardDetails.translatesAutoresizingMaskIntoConstraints = NO;
NSDictionary *contentDictionary = @{@"cardDetails":cell.cardDetails, @"actionReminderCard":cell.actionCardReminder};
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[cardDetails]" options:0 metrics:nil views:contentDictionary]];
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-330-[actionReminderCard]" options:0 metrics:nil views:contentDictionary]];
NSLog(@"%f", cell.cardDetails.frame.size.width);
NSLog(@"%f", cell.cardDetails.frame.size.height);
}
在上面的代码中,如果部分工作正常,当涉及到else时,我试图将约束更改为xib
中设置的默认约束,但它不起作用。它显示的视图与之前更改约束的视图相同。
提前致谢。
答案 0 :(得分:1)
在向单元格添加新约束之前,您需要首先删除旧的约束,这可能是导致问题的原因。删除所有约束后,您需要以编程方式再次添加所有约束。
[cell.contentView removeConstraints:cell.contentView.constraints];
答案 1 :(得分:1)
每当你添加约束时。添加新约束时不会删除它。所以你应该删除这些约束并添加新约束,否则你应该更新相同的约束。你可以用两种方式做到这一点。
以编程方式首先删除所有约束,然后添加新约束。和@Tejvansh Singh Chhabra的答案一样。 但请确保它会删除所有内容视图的约束。
[cell.contentView removeConstraints:cell.contentView.constraints];
其他选项是NSLayoutConstraint
X位置的出口,然后更新它。但我认为你应该将所有内容视图的子视图添加到UIView,然后将前导约束绑定到你的插座,只需在if-else条件下更改cell.yourConstraint.constant = yourvalue
。
在自定义单元格中选择一个插座
IBOutlet NSLayoutConstraint *constraint_xPosition;
然后将其输出,如下图所示。
并且在if-else条件下更改常量,如cell.constraint_xPosition.constant = 0;//-320
也许这会对你有帮助。