【问题标题】:Objective-C setFrame Swift equivalentObjective-C setFrame Swift 等效
【发布时间】:2015-11-18 03:43:56
【问题描述】:

我有一个我正在重构的 Objective-C 项目,我发现了一条我无法翻译的行,而且 Apple 的文档站点似乎已关闭:

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

我试过了:

    self.stepperView.frame = stepperView.frame

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

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

【问题讨论】:

    标签: objective-c swift uiview swift2


    【解决方案1】:

    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 之间的某个地方极有可能是其他东西,你无法控制的东西是重新定位您的视图。最可能的罪魁祸首是视图边界更改和调整所有子视图。

    【讨论】:

    • 很棒的解释。我晚上关机了,但我会在早上试一试,让你知道它是怎么回事。谢谢你这么详细的回复。我认为你找到了罪魁祸首 (viewDidLoad)
    • 当然可以。此外,如果您需要手头的文档,请查看:kapeli.com/dash
    • 感谢 Dash 的推荐。这是一个甜蜜的应用程序!
    【解决方案2】:

    如果您使用带有自动布局的情节提要并且在 Outlet 上连接到您的视图,则设置 view.frame 将不起作用,除非您为要调整大小的对象设置 translatesAutoresizingMaskIntoConstraints = true 或取消选中文件中的自动布局Xcode的检查员

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

    如果您以编程方式添加子视图并设置 view.frame 大小,则在运行时自动布局不会干扰该视图框架大小。尽管如果您将新视图添加为情节提要中定义的视图的子视图并且 clipToBounds 为 true 或选中 Clips Subviews,您的新视图将被剪裁。

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

    【讨论】:

      猜你喜欢
      • 2015-10-05
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多