【问题标题】:Automatically move UIView with Constraints使用约束自动移动 UIView
【发布时间】:2014-04-21 16:39:49
【问题描述】:

我在 UIScrollView 中有一些可展开的视图,当它们展开时,我需要它们下面的所有视图自动向下移动,无论展开的视图展开多少。

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

实际发生的情况:

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

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

有没有一种简单的方法可以通过约束来做到这一点,并且不需要大量的代码?我还没有完全弄清楚。

【问题讨论】:

  • 你现有的布局是通过约束完成的吗?
  • 您是否在 Storyboard 中设置了约束?使用自动布局?
  • 我定位了元素,然后通过控制+拖动在两者之间应用间距约束,然后使用“解决自动布局问题”> 添加缺失的约束。我确实启用了自动布局。
  • 我对约束不熟悉,并认为它们需要的设置比实际看起来要少得多。我认为只需设置垂直间距并更改框架即可使约束起作用,但事实似乎并非如此。我只需要和他们多合作。

标签: ios objective-c uiview uiscrollview constraints


【解决方案1】:

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

- (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;
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多