【问题标题】:Why can't I change the view's frame size in Swift?为什么我不能在 Swift 中更改视图的帧大小?
【发布时间】:2015-07-22 04:12:54
【问题描述】:

所以这是我遇到过的最奇怪的事情。

我在UIViewController 上的UIView 之上添加了一个简单的UIView。我将大小更改为 200 x 200,然后我想通过将这行代码放在 viewDidLoad 方法中来更改 UIView 的大小:

self.gameBackgroundView.frame.size.height = 10

这在 Swift 中似乎很正常。虽然,什么都没有发生。我可以更改颜色、圆角半径等...

编辑:

我还从该视图中删除了所有约束,但它仍然不起作用。

【问题讨论】:

  • 两件事。我记得在 Obj-C 中,您必须更改整个框架属性才能更新视图。另一件事是,如果您设置了自动布局约束,它将忽略帧更改。
  • 我在另一个 UIView 上设置了 4 个约束,这是否适用于我的另一个为什么我要更改哪个框架?
  • 你能展示你如何创建视图并将其添加为子视图吗?
  • 我打开我的故事板,在我的 UIViewController 顶部拖动一个新的 UIView,更改背景颜色以便我可以看到框架的变化,并在相应的类文件中创建一个 IBOutlet
  • 如果你没有在 InterfaceBuilder 中设置约束,一些约束会被自动添加。查看gameViewBuilder.constraints。还要确保gameViewBuilder.translatesAutoResizingMaskToConstraints 为真。

标签: ios swift uiview frame


【解决方案1】:

这是因为 Auto Layout,但是,您可以在 Auto Layout 完成它的工作或更改它的约束后执行它。将其设置为您的frame,而不是您的viewDidAppear()。它应该可以工作。

希望对你有帮助。

【讨论】:

  • 在自动布局中更改框架将无济于事,一旦调用布局子视图,它将重置。而是更改约束
  • 我没有对该视图设置任何限制,但我在上面还有另一个视图,但我认为这与它没有任何关系
【解决方案2】:

好的,所以我在堆栈上找到了一个解决方案..

Change frame programmatically with auto layout

有效的正确答案是:

  1. 我需要为我的 heightConstraint 创建一个 IBOutlet
  2. 相应地更改该约束的值

谢谢大家!

【讨论】:

    【解决方案3】:

    试试这个代码,它可以在任何设备上运行

    let BackImage = UIImage(named: "backGrndImg@2x.png")!
    
    var imageView: UIImageView!
    
    override func loadView() {
    
        super.loadView()
        self.imageView = UIImageView(frame: CGRectZero)
        self.imageView.contentMode = .ScaleAspectFill
        self.imageView.image = BackImage
        self.view.insertSubview(imageView, atIndex: 0)
    
    }
    
    override func viewDidLayoutSubviews() {
    
        super.viewDidLayoutSubviews()
        self.imageView.frame = self.view.bounds
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      相关资源
      最近更新 更多