2015-04-06 41 views
0

我正在将应用更新到iOS7/8,并应用自动布局功能。 在我的UIViewController我有几个UIViews的位置应该修改为UIScrollView更新其contentOffset如何使用自动布局在控制器中移动UIView

当我更新UIView's框架(旧方式)时,由于控制器自动布局约束(我使用VFL以编程方式设置约束条件,我没有故事板),因此出现一些故障和错误。

所以问题是:哪个是在实现Autolayout的控制器中移动UIViews的最佳方法? 也许更新约束?我应该使用Core Animation来制作任何UIView吗?

在此先感谢!

回答

3

如果你有约束建立情节板中的任何约束,你需要更新(就像你做,你可以设置一个出口任何视图)。 一旦你这样做,你可以根据需要更新约束常量属性。

[self layoutIfNeeded]; 
topConstraint.constant += 200; 
[UIView animateWithDuration:0.3 animations:^{ 
     [self layoutIfNeeded]; 
    }]; 

在上面的代码中,我正在更新视图的topConstraint并为更改设置动画效果。在约束被修改之前,您需要调用[self layoutIfNeeded];一次,并再次在动画块中调用。

+0

如果我使用视觉格式语言来设置约束条件,该怎么办? (我没有故事板)。 – 2015-04-06 09:22:38

+0

VFL有些困难,您应该尝试对需要更新的约束使用'+ constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:'。 – marosoaie 2015-04-06 09:29:20

+0

'+ constraintsWithVisualFormat:options:metrics:views:'返回一个约束数组,你必须通过循环来找到你需要的然后保存它,这不是一个好主意 – marosoaie 2015-04-06 09:30:51

-1
self.yourView.translatesAutoresizingMaskIntoConstraints = YES; 

然后只是改变了框架:

CGRect rect = self.yourView.frame; 
// move or change size 
rect.origin.x = whatever... 
self.yourView.frame = rect.