面对一个非常奇怪的问题,试图动态地将左侧导航面板添加到View Controller,(应该能够支持应用程序中的任何视图控制器,模糊地类似于Facebook导航)我的想法似乎相当简单,但我'我真的没有看到它在哪里崩溃。我所做的是使用以下方法在UIViewController
上创建了一个类别,我认为这会将所有子视图移动到右侧,然后添加新视图。
-(void)addLeftView:(UIView *)newView
{
newView.frame=CGRectMake(0, 0, newView.frame.size.width, self.view.frame.size.height);
for(UIView *view in [self.view subviews])
{
view.frame=CGRectMake(view.frame.origin.x + newView.frame.size.width, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
}
[self.view addSubview:newView];
}
但实际发生的是视图已添加,但子视图不会向右移动。但是,如果您对addSubview
进行评论,则所有内容实际上都会按预期完全向右移动。
为了使事情变得更加奇怪,如果你将视图移动包裹在[UIView animateWithDuration:completionHandler:]
中,其中完成处理程序添加了子视图,动画实际发生 - 所有视图都向右移动,但是当子视图被添加时,他们跳回到他们的起始位置。
我认为这是一个古怪的auto-layout
问题,所以只是为了看看发生了什么,我清除了该视图控制器的所有约束,并得到了相同的结果。
答案 0 :(得分:0)
在类似但不相关的线程中找到答案。 Can I disable autolayout for a specific subview at runtime?
基本上它是自动布局还原我的定位,所以通过在问题的UIViews上设置此用户变量来解决我的问题。
您可以在xib / storyboard中所需的UIView的用户定义运行时属性中将 translatesAutoresizingMaskIntoConstraints 类型布尔值设置为“是”。