使用约束自动移动UIView

时间:2014-04-21 16:39:49

标签: ios objective-c uiview uiscrollview constraints

我在UIScrollView中有一些可扩展的视图,当这些视图展开时,我需要它们下面的所有视图自动向下移动,但扩展的视图扩展了很多。

我想要发生的事情:(左边是起始位置,右边是换帧后)

what i want

实际发生了什么: what I get

其他几个视图也需要移动,以便在黄色视图底部有一个固定的空间。我假设(希望)如果我可以在蓝色视图扩展时让黄色视图向下移动,那么它们也会移动。

我正在通过blueView.frame = newFrame;更新尺寸,其中新框架的高度更大。

是否有一种简单的方法可以使用约束来完成此操作,这不需要大量的代码?我还没弄清楚。

2 个答案:

答案 0 :(得分:0)

以下是我最近用于类似目的的代码,

- (void)viewDidLoad
{
[super viewDidLoad]; 
_expandableView = [[UIView alloc] init];
_adjacentView = [[UIView alloc] init];

[_expandableView setBackgroundColor:[UIColor redColor]];
[_scrollView addSubview:_expandableView];
_expandableView.translatesAutoresizingMaskIntoConstraints = NO;

[_adjacentView setBackgroundColor:[UIColor blueColor]];
[_scrollView addSubview:_adjacentView];
_adjacentView.translatesAutoresizingMaskIntoConstraints = NO;

NSArray *constraints = nil;
NSDictionary *views = NSDictionaryOfVariableBindings(_expandableView,_adjacentView);

constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[_expandableView]-10-[_adjacentView(==20)]-|" options:0 metrics:nil views:views];
[_scrollView addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[_expandableView(==20)]" options:0 metrics:nil views:views];
heightConstraint = [constraints lastObject];
[_scrollView addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_expandableView(==800)]-|" options:0 metrics:nil views:views];
[_scrollView addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_adjacentView(==800)]-|" options:0 metrics:nil views:views];
[_scrollView addConstraints:constraints];

}

- (IBAction)expandAction:(id)sender
{
  heightConstraint.constant = heightConstraint.constant+20;
}

答案 1 :(得分:0)

我只是不理解约束所需的工作量(而不是它太过分了)。
我想我只需要设置垂直间距,然后框架更改为蓝色视图将移动黄色视图。我还必须配置一些其他约束(不使用'添加缺失约束'选项)来删除所有警告,现在它按预期工作。