【问题标题】:Cannot change the frame properties of a UIView无法更改 UIView 的框架属性
【发布时间】:2015-06-03 14:13:24
【问题描述】:

我有一个 UIView

@IBOutlet weak var myView: UIView!

我使用 NSArchiver 复制它

var topview = NSKeyedUnarchiver.unarchiveObjectWithData(NSKeyedArchiver.archivedDataWithRootObject(self.myView));

我尝试使用 CGRectMake 来改变它

topview?.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height * 1.5)

响应上面的“=”行,我收到了错误

Cannot assign to result of this expression

我尝试了多种方法来更改 topview 的框架属性,尽管每次尝试最终都会遇到此错误。任何帮助将不胜感激。

【问题讨论】:

    标签: ios swift uiview frame nskeyedarchiver


    【解决方案1】:

    unarchiveObjectWithData 返回一个可选的 AnyObject 并且 AnyObject 本身没有 frame 属性。所以你需要将topView转换为UIView

    var topview = NSKeyedUnarchiver.unarchiveObjectWithData(NSKeyedArchiver.archivedDataWithRootObject(self.myView)) as? UIView
    

    【讨论】:

    • 非常感谢。我是 Swift 的新手,并且在我早期的编程生涯中,所以我错过了对其他人来说可能很明显的东西。随着时间的推移,我会明白的。再次感谢。
    【解决方案2】:

    据我了解:

    因为topview 是可选的,所以框架也是可选的。这意味着帧有可能为零。那么你将分配一个CGRectnil。这是不可能的。

    这应该可行:

    if let view = topview as? UIView {
        view.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height * 1.5)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多