Objective-C setFrame等效的Swift

时间:2015-11-18 03:43:57

标签: objective-c swift uiview swift2

我有一个Objective-C项目,我正在重构,而且我已经找到了一条我无法翻译的行,Apple的文档网站似乎已经失效了:

[self.stepperView setFrame:self.stepperView.frame];

我试过这个:

    self.stepperView.frame = stepperView.frame

但视图仍然在错误的位置绘制。有没有人知道Swift中的setFrame等价物?

我试着查看Apple's documentation,但网站似乎已关闭了:

enter image description here

2 个答案:

答案 0 :(得分:8)

setFrameframe在Objective-C和Swift中是等效的。

在Objective-C中,setFrame是生成的属性的setter方法。你也可以(在Objective-C中)view.frame = someFrame与调用setFrame: 100%相同,这只是你喜欢哪种语法的问题。

在Swift中,所有setVariable:方法名称都替换为等同于view.frame = ...的点语法。

至于为什么你的观点被绘制在错误的位置,你必须发布一个具体的例子来说明你如何放置你的观点。这很可能是数学或计算错误。同样值得注意的是,与典型的笛卡尔坐标不同,iOS坐标布局的y值随着下降而增加。

我还注意到,您在屏幕截图中的一个标签中搜索到“无法在viewDidLoad之前设置框架”。 viewDidLoad是设置任何帧值的错误位置。根据文件:

This method is called after the view controller has loaded its view hierarchy into memory. This method is called regardless of whether the view hierarchy was loaded from a nib file or created programmatically in the loadView method. You usually override this method to perform additional initialization on views that were loaded from nib files.

这意味着viewDidLoad是初始化状态,变量的地方,不管布局的位置是什么,因为它很可能介于viewDidLoadviewDidAppear之间的其他地方,你无法控制的东西是重新定位你的观点。最可能的罪魁祸首是视图边界改变和调整所有子视图。

答案 1 :(得分:0)

如果您使用具有自动布局的故事板并且将Outlet连接到视图,则设置view.frame将无效,除非您为要调整大小的对象设置translatesAutoresizingMaskIntoConstraints = true或仅取消选中文件中的自动布局Xcode检查员

如果您不使用自动布局,那么您可以在viewDidLoad()中设置view.frame大小,它将起作用

如果要以编程方式添加子视图并设置view.frame大小,则在运行时,“自动布局”不会干扰该视图的帧大小。虽然如果将新视图添加为故事板中定义的子视图且clipToBounds为true或选中了“剪辑子视图”,则会剪切新视图。

我相信Swift和Objective-C都是如此