swift2 Objective-C setFrame Swift等效项

flseospp  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(272)

我有一个正在重构的Objective-C项目,我遇到了一行无法翻译的代码,苹果的文档站点似乎也关闭了:

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

我试过这个:

self.stepperView.frame = stepperView.frame

但是视图仍然被绘制在错误的位置。有人知道Swift中的setFrame等价物吗?
我尝试查看Apple's documentation,但该站点似乎已关闭:

iq0todco

iq0todco1#

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之间的某个地方,有一些你无法控制的东西正在重新定位你的视图。最有可能的原因是视图边界更改和调整所有子视图。

6yoyoihd

6yoyoihd2#

如果您使用的是带有自动布局的故事板,并且没有插座连接到您的视图,则设置视图.frame将不起作用,除非您为尝试调整大小的对象设置translates AutoresizingMaskIntoConstraints = true,或者只是取消选中Xcode的文件检查器中的自动布局
如果不使用自动布局,则可以在viewDidLoad()中设置视图的帧大小,它将起作用
如果您以编程方式添加子视图并在运行时设置视图框架大小,则自动布局不会影响视图框架大小。尽管如果您将新视图添加为情节提要中定义的视图的子视图,并且clipToBounds为true或选中了Clips Subviews,但新视图将被裁剪。
我相信Swift和Objective-C都是如此

相关问题