I am trying to do something like this:
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSLog(@"%@", self.tableViewHeight); self.tableViewHeight.constant = 0; NSLog(@"%@", self.tableViewHeight); [self.tableView setNeedsUpdateConstraints]; [self.tableView setNeedsLayout]; [self.view setNeedsUpdateConstraints]; [self.view setNeedsLayout]; }
But sometimes this work, and sometimes not. I always see the correct log messages:
<NSLayoutConstraint:0x9ebe7a0 V:[UITableView:0xa345a00( 304@500 )] priority:500> <NSLayoutConstraint:0x9ebe7a0 V:[UITableView:0xa345a00( 0@500 )] priority:500>
Why is this happening? How to change the NSLayoutConstraints properties before the user interface becomes visible?
UPDATE:
This code works 20 times by 20 times (but I think it is always always):
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; dispatch_async(dispatch_get_main_queue(), ^{ self.tableViewHeight.constant = 0; [self.view setNeedsUpdateConstraints]; }); }
Just tell me why this is actually happening?
UPDATE 2:
It seems that the previous code still does not work, but it works:
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.topViewHeight.constant += self.tableViewHeight.constant; self.tableViewHeight.constant = 0; [self.view setNeedsUpdateConstraints]; }
UPDATE 3:
I NEVER SET EQUAL PRIORITIES (AS LIKE 500) TO SEVERAL RESTRICTIONS WITH CONNECTED VIEWS ...
source share