我正在开发一个iOS应用程序并遇到了一个奇怪的问题。我正在做一个调整视图大小的日志,所以视图加载了,我有一个ivar,它保存了我在Interface Builder中调整大小的视图的初始大小。初始CGFrame rect是:(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的新手。答案 0 :(得分:1)
我打算将其放在评论中,但这太长了,所以:
在这些情况下我喜欢的一个技巧是覆盖我遇到问题的视图类中的setFrame:
,并在该重写方法中设置断点。如果你这样做,那么你可以看到帧的变化,看看调用堆栈。
它并不总是完全直截了当,压倒setFrame:
。可以直接设置frame
属性,但 也可以从视图的bounds
和center
派生,因此您可能需要查找设置视图bounds
或视图center
而不是frame
的内容。
此外,如果视图具有非身份transform
,则会使frame
属性的行为非常奇怪。如果要在视图上设置非身份转换,则应该完全避免使用frame属性。