【问题标题】:UIView frame not updating in Swift 2.0/iOS 8.0 & iOS 9.0UIView 框架未在 Swift 2.0/iOS 8.0 和 iOS 9.0 中更新
【发布时间】:2016-03-29 10:05:22
【问题描述】:

我正在尝试在 Swift 2.0 中更新视图的 y 位置。但它没有发生。我没有使用自动布局。这是我的代码:

func textViewDidBeginEditing(textView: UITextView) {
    var frame : CGRect = self.frameView.frame
    frame.origin.y = -390
    //self.frameView.frame = frame
    self.frameView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height)
    print(" frame \(self.frameView.frame)")
}

虽然当我打印框架时,它会显示更新后的值,但更改不会反映。任何线索我错过了什么?

【问题讨论】:

  • 代码在您的“viewDidLoad”方法或“viewWillAppear”中?在 viewWillAppear 中添加代码,而不是在 viewDidLoad 中。
  • 是否在storyboard/xib上添加了view?
  • self.frameView 是你的文本视图
  • 当您说“我没有使用 AutoLayout”时,您到底是什么意思?您是否在 Interface Builder 中创建了视图?你试过做...print(self.constraints)。忽略 Auto Layout 的事实并不是“不使用 Auto Layout”。
  • 顺便说一句...您可能正在使用 AutoLayout,并且在使用 AutoLayout 时无法直接更改视图的框架。

标签: ios swift uiview


【解决方案1】:

我的猜测是其他一些代码会更改框架并覆盖您的更改。这就是为什么您看不到您期望的框架的原因。使用视图调试检查框架(xcode 中代码选项卡下方的 3 个矩形按钮)。您还可以在 UIView setFrame 方法上设置符号断点,以检查帧从何处更改。

【讨论】:

    【解决方案2】:

    确保在运行时更改 UIView 的帧后更新约束。希望它应该工作。

    self.view .needsUpdateConstraints()
    self.view .needsUpdateConstraints()
    self.view .setNeedsLayout()
    self.view .layoutIfNeeded()
    

    或者,如果您没有使用 AutoLayout,请检查您是否在 Storyboard 上设置了正确的 AutoResizing Mask。您需要以编程方式更新 AutoResizingMask。示例:-

    self.view.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin |     UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin |     UIViewAutoresizingFlexibleTopMargin
    

    【讨论】:

    • 或者正确使用 AutoLayout :P
    • 我没有使用 AutoLayout。我的应用没有使用 AutoLayout。
    • @TechBee 请查看我对您问题的评论。如果您没有明确告诉您的应用您绝对没有在 UI 的每一处都使用 AutoLayout(这很难做到),那么您正在使用 AutoLayout。
    • 我在应用程序中禁用了自动布局。
    【解决方案3】:

    我设置了view的frame而不是frameView,问题就解决了。

    【讨论】:

      【解决方案4】:

      更新 func layoutSubviews() 中的视图框架对我有用。

      【讨论】:

        猜你喜欢
        • 2016-05-18
        • 1970-01-01
        • 2015-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多