连续调用几个 [UIVIew setFrame:] 并不会全部执行

Posted

技术标签:

【中文标题】连续调用几个 [UIVIew setFrame:] 并不会全部执行【英文标题】:Calling a few [UIVIew setFrame:] in a row doesn't execute all of them 【发布时间】:2013-04-15 13:28:59 【问题描述】:

在滑出视图的其他内容时,我在将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);


(通常我会在UIView 动画中制作setFrames,但对于这个例子来说没关系,因为它无论如何都不起作用)

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

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

【问题讨论】:

显然我在写这篇文章时并没有那么专注。代码示例现在应该是正确的。对不起。 您是否尝试过要求重新粉刷? 【参考方案1】:

这一行有错别字:

 CGRect viewFrame2 = self.viewThatShoudlDisappear1.frame;

大概应该是这样的:

 CGRect viewFrame2 = self.viewThatShoudlDisappear2.frame;

【讨论】:

谢谢 - 编辑它。由于某些原因,我不得不更改 var 名称;)【参考方案2】:

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

【讨论】:

【参考方案3】:

好吧,我想我并不完全了解 AutoLayout。由于来自Toto 的tip,我尝试在ios 5 下对其进行测试,并且不得不在各处停用AutoLayout 才能运行它。

它立即在 iOS 5 上运行。之后我切换回 iOS 6 没有再次激活 AutoLayout,它也在那里完美运行。

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

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

【讨论】:

我的经验是自动布局一个奇怪的错误。

以上是关于连续调用几个 [UIVIew setFrame:] 并不会全部执行的主要内容,如果未能解决你的问题,请参考以下文章

UIView setFrame 线程安全

动画 UIView setFrame 在每个动画帧上强制 drawRect

如何在 iPhone 中为照片创建灵活的框架?

在 Xcode 中对子类使用符号断点?

如何检测类的属性何时更改

使用图像为 UIView 的位置和大小设置动画的正确方法(此方法在 Xcode 6 中中断)?