更新frame属性时UIImageView不会改变大小

时间:2014-12-27 03:00:55

标签: ios swift uiview uiviewcontroller uiimageview

我使用的是Swift iOS 8.0。我有一个UIViewController的UI设置,我使用Xcode 6.1.1中的Interface builder创建了它。

  • 主要的UIView(MainView)
  • 在这个主要的UIView中,我有四个水平分层的子UIViews在屏幕上运行
  • 在每个UIViews中我都有其他类型的视图(UIImageViews,UILabels等)

现在让我们来看看顶级子UIView(我将其称为SubView1)。它里面有一个UIImageView。我想以编程方式做两件事(我不想使用AutoLayout):

  1. 根据MainView的大小更改SubView1的大小
  2. 根据SubView1的新大小更改UIImageView。
  3. 目前我有以下代码试图这样做(这还没有被重构):

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
    
        var mainViewWidth = self.view.bounds.width
        var mainViewHeight = self.view.bounds.height
    
        // calculate new size for subView
        var subViewHeight : CGFloat = mainViewHeight / 4
        var subViewWidth : CGFloat  = mainViewWidth
    
        var nextXPosn : CGFloat  = 0
        var nextYPosn : CGFloat  = 0
    
        // change frame size for SubView1
        self.subView1.frame = CGRect(x: nextXPosn, y: nextYPosn, width: subViewWidth, height: subViewHeight)
    
        var originalSubViewHeight : CGFloat = originalMainViewHeight / 4.0
        var scaleFactor : CGFloat = subViewHeight / originalSubViewHeight
    
        // calculate new height and width for image
        var newHeight : CGFloat = subImage.bounds.height * scaleFactor
        var newWidth : CGFloat = subImage.bounds.width * scaleFactor
    
        // change frame size and position for image
        self.subImage.frame = CGRect(x: 10, y: 10, width: newWidth, height: newHeight)
    
    }
    

    请注意,我对x和y位置使用了任意值。当此代码执行时,subImage或subView1的大小或位置都不会更改。我有没有设置允许这些视图改变位置和大小的东西?为什么没有变化?

    注意:我刚试过的是删除更改subView1

    大小的行
    self.subView1.frame = CGRect(x: nextXPosn, y: nextYPosn, width: subViewWidth, height: 
    

    subViewHeight)

    现在subImage的大小和位置发生了变化。看起来好像通过移动和改变subView1的大小,它可以防止改变subImage(它的子视图)的大小和位置。我不确定为什么会这样。

1 个答案:

答案 0 :(得分:0)

尝试

self.subView1.frame = CGRectMake(x: nextXPosn, y: nextYPosn, width: subViewWidth, height: subViewHeight)

您使用的是CGRect,而不是使用CGRectMake。