【问题标题】:CGRect giving weird sizesCGRect 给出奇怪的尺寸
【发布时间】:2014-07-10 20:48:03
【问题描述】:

我正在开发一个 iOS 应用程序并遇到了一个奇怪的问题。我正在记录视图大小的调整等视图确实加载了,我有一个 ivar,它保存了我在 Interface Builder 中调整大小的视图的初始大小。初始 CGFrame 矩形为:(x = 0, y = 63, width = 284, height = 705)。我用来保存初始值的代码是:

filesFrame = self.fileView.frame;

我唯一接触 self.fileView.frame 的地方是:

 self.fileView.frame = filesFrame;
 self.fileView.frame = fullFilesFrame;    

它们位于两个不同的位置,而不是彼此紧挨着 fullFilesFrame 定义为:

fullFilesFrame = CGRectMake(self.view.frame.origin.x,self.view.frame.origin.y+63,
    self.view.frame.size.height,self.view.frame.size.width+63);

当我调整回初始帧后检查我的值时,帧矩形现在是原点 CGPoint (x=0, y=63) CGSize(宽度=28,高度=961)

这怎么可能? 这是我第一次处理视图大小的调整,而且我对 iOS 也相当陌生。

【问题讨论】:

  • 可能是因为自动调整掩码设置不正确。你在使用自动布局吗?

标签: ios objective-c cgrect


【解决方案1】:

我本来打算把这个放在评论里的,但是太长了,所以:

在这些情况下我喜欢的一个技巧是在我遇到问题的视图类中覆盖setFrame:,并在该被覆盖的方法中设置一个断点。如果你这样做了,那么你可以看到帧何时发生变化并查看调用堆栈。

它并不总是完全直截了当,覆盖setFrame:frame 属性可以直接设置,但它可以从视图的boundscenter 派生,因此您可能需要寻找设置视图的bounds 或视图的东西center 而不是 frame

另外,如果视图有一个非标识transform,那会使frame 属性的行为非常奇怪。如果您在视图上设置非身份转换,则应该完全避免使用 frame 属性。

【讨论】:

  • 自动调整大小可以设置边界或中心吗?
  • 我并没有仔细研究它,但为了安全起见,我假设自动调整大小(以及一般的 UIKit)可能触及这些属性中的任何一个。
猜你喜欢
  • 1970-01-01
  • 2011-11-06
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多