ios中的约束没有变化

时间:2014-12-29 05:21:26

标签: ios objective-c iphone nslayoutconstraint

我创建了一个应用,其中我有一个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中设置的默认约束,但它不起作用。它显示的视图与之前更改约束的视图相同。

提前致谢。

2 个答案:

答案 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;

然后将其输出,如下图所示。

enter image description here

并且在if-else条件下更改常量,如cell.constraint_xPosition.constant = 0;//-320

也许这会对你有帮助。