1

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在动画中做 sUIView但这对于这个例子并不重要,因为它无论如何都不起作用)

发生的情况是应该滑入或更确切地说现在位于(0,0)的视图出现,但其他视图没有移开。并且仍然显示在新视图下。

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

4

3 回答 3

0

当我不小心从后台线程使用 UIKit 时,我看到过这样的奇怪事情。UIKit 应该只在主线程中使用。

于 2013-04-15T17:34:02.963 回答
0

这一行有一个错字:

 CGRect viewFrame2 = self.viewThatShoudlDisappear1.frame;

据推测,这应该是:

 CGRect viewFrame2 = self.viewThatShoudlDisappear2.frame;
于 2013-04-15T13:34:23.427 回答
0

好的,所以我想我并不完全了解 AutoLayout。由于Toto的提示,我尝试在 iOS 5 下对其进行测试,并且不得不在各处停用 AutoLayout 才能运行它。

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

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

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

于 2013-04-15T23:50:12.320 回答