连续调用几个[UIVIew setFrame:]不会执行所有这些操作

时间:2013-04-15 13:28:59

标签: ios objective-c ipad uiview

我在滑出视图的其他内容时将UIView滑入另一个内容时出现了一个奇怪的问题。

这是代码:

- (void)moveAddStudentViewIntoSuperView
{
     CGRect viewFrame1 = self.viewThatShoudlDisappear1.frame;
     CGRect viewFrame2 = self.viewThatShoudlDisappear2.frame;
     CGRect newFrame = self.viewControllerThatshouldAppear.view.frame;

     viewFrame1.origin.x = -300;
     viewFrame2.origin.x = -300;
     newStudentFrame.origin.x = 0;

     NSLog(@"\n 1: %@ \n 2: %@ \n 3: %@", self.viewThatShoudlDisappear1, self.viewThatShoudlDisappear2, self.viewControllerThatshouldAppear.view);

     [self.viewThatShoudlDisappear1 setFrame:viewFrame1];
     [self.viewThatShoudlDisappear2 setFrame:viewFrame2];
     [self.viewControllerThatshouldAppear.view setFrame:newFrame];

     NSLog(@"\n 1: %@ \n 2: %@ \n 3: %@", self.viewThatShoudlDisappear1, self.viewThatShoudlDisappear2, self.viewControllerThatshouldAppear.view);

}

(通常我会在setFrame动画中执行UIView s,但这个例子并不重要,因为它无论如何都不起作用)

发生的情况是,应该滑入的视图现在位于(0,0),但其他视图不会移开。并且仍然显示在新视图下。

奇怪的是,日志输出所有视图都在正确的位置。 [self.view setNeedsLayout]调用之间的setFrame也不会改变任何内容,更有趣的是,如果我从新视图中删除setFrame,那么应该消失的视图确实会正确消失。

3 个答案:

答案 0 :(得分:0)

这一行有一个错字:

 CGRect viewFrame2 = self.viewThatShoudlDisappear1.frame;

据推测,这应该是:

 CGRect viewFrame2 = self.viewThatShoudlDisappear2.frame;

答案 1 :(得分:0)

当我意外地从后台线程中使用UIKit时,我看到了类似这样的奇怪事情。 UIKit只能在主线程中使用。

答案 2 :(得分:0)

好的,我想我不完全了解AutoLayout。由于来自tipToto,我尝试在iOS 5下测试它,并且必须在任何地方停用AutoLayout来运行它。

它立即与iOS 5一起使用。之后我又切换回iOS 6而没有再次激活AutoLayout,它也完美地在那里工作。

我的解决方案是:在XIB文件中停用AutoLayout。

但我想不出这应该是默认行为的方式。也许我错过了AutoLayout的一点,或者这是一个奇怪的错误。一旦我与更多的开发者交谈,我可能会在必要时提交错误报告。