我有一个正在重构的Objective-C项目,我遇到了一行无法翻译的代码,苹果的文档站点似乎也关闭了:
[self.stepperView setFrame:self.stepperView.frame];
我试过这个:
self.stepperView.frame = stepperView.frame
但是视图仍然被绘制在错误的位置。有人知道Swift中的setFrame
等价物吗?
我尝试查看Apple's documentation,但该站点似乎已关闭:
我有一个正在重构的Objective-C项目,我遇到了一行无法翻译的代码,苹果的文档站点似乎也关闭了:
[self.stepperView setFrame:self.stepperView.frame];
我试过这个:
self.stepperView.frame = stepperView.frame
但是视图仍然被绘制在错误的位置。有人知道Swift中的setFrame
等价物吗?
我尝试查看Apple's documentation,但该站点似乎已关闭:
2条答案
按热度按时间iq0todco1#
setFrame
和frame
在Objective-C和Swift中是等效的。在Objective-C中,
setFrame
是为属性生成的setter方法。你也可以(在Objective-C中)做view.frame = someFrame
,这和调用setFrame:
是100%相同的,只是你喜欢哪种语法的问题。在Swift中,所有的
setVariable:
方法名都被替换为view.frame = ...
的点语法等价物。至于为什么你的视图被画在了错误的位置,你必须发布一个具体的例子来说明你是如何放置你的视图的。这很可能是一个数学或计算错误。同样值得注意的是,iOS坐标布局的y值随着你的下降而增加,这与典型的笛卡尔坐标不同。
我还注意到,在截图中的一个选项卡中,您搜索了“无法在viewDidLoad之前设置帧”。
viewDidLoad
是设置任何帧值的错误位置。根据文档:这意味着
viewDidLoad
是初始化状态、变量等的地方,但不是布局的地方,因为很可能在viewDidLoad
和viewDidAppear
之间的某个地方,有一些你无法控制的东西正在重新定位你的视图。最有可能的原因是视图边界更改和调整所有子视图。6yoyoihd2#
如果您使用的是带有自动布局的故事板,并且没有插座连接到您的视图,则设置视图.frame将不起作用,除非您为尝试调整大小的对象设置translates AutoresizingMaskIntoConstraints = true,或者只是取消选中Xcode的文件检查器中的自动布局
如果不使用自动布局,则可以在viewDidLoad()中设置视图的帧大小,它将起作用
如果您以编程方式添加子视图并在运行时设置视图框架大小,则自动布局不会影响视图框架大小。尽管如果您将新视图添加为情节提要中定义的视图的子视图,并且clipToBounds为true或选中了Clips Subviews,但新视图将被裁剪。
我相信Swift和Objective-C都是如此