无法使用 CGRectMake 调整 UIButton 的大小

Cant resize a UIButton with CGRectMake

我有一个带有图像的按钮,我正在使用 UIView.animateWithDuration 为视图和图像视图分配新的大小。

视图正确放大,但图像视图没有变化

代码片段:

@IBAction func imageButtonDidTouch(sender: AnyObject) {

    UIView.animateWithDuration(0.7) { 

        /*** Executes Properly ***/
        self.dialogView.frame = CGRectMake(0, 0, self.screenWidth!, self.screenHeight!)

        /*** Does Not Execute ****/
        self.imageButton.frame = CGRectMake(0, 0, self.screenWidth!, 240)


        /*** Executes Properly ***/
        self.likeButton.hidden = true
        self.shareButton.hidden = true
        self.userButton.hidden = true
        self.headerView.hidden = true
        self.dialogView.layer.cornerRadius = 0

    }

}

按下按钮前的屏幕截图:

按下按钮后的屏幕截图:

屏幕宽度和屏幕高度已在 viewDidLoad()

中定义
screenWidth = UIScreen.mainScreen().bounds.width
   screenHeight = UIScreen.mainScreen().bounds.height

编辑 1: imageButton 声明

@IBOutlet weak var imageButton: UIButton!

编辑 2: 我在动画函数中添加了一个完成处理程序:

    @IBAction func imageButtonDidTouch(sender: AnyObject) {


    print("Height Before:", self.imageButton.frame.height)
    print("Width Before:",self.imageButton.frame.width)

    UIView.animateWithDuration(0.7, animations: { 

                    /*** Executes Properly ***/
                    self.dialogView.frame = CGRectMake(0, 0, self.screenWidth!, self.screenHeight!)

                    /*** Does Not Execute ****/
                    self.imageButton.frame = CGRectMake(0, 0, self.screenWidth!, 240)


                    /*** Executes Properly ***/
                    self.likeButton.hidden = true
                    self.shareButton.hidden = true
                    self.userButton.hidden = true
                    self.headerView.hidden = true
                    self.dialogView.layer.cornerRadius = 0



        }) { (true) in


            print("Height After:", self.imageButton.frame.height)
            print("Width After:",self.imageButton.frame.width)

    }

}

控制台截图:

查看层次结构:

在设置 imageButton 大小之前检查您是否收到所需的屏幕宽度。

获取 UIScreen 帧数据的正确位置在 viewDidLayoutSubviews 中,因为它是在子视图在屏幕上布局后调用的,也是在每次设备更改方向后调用的,例如因为当您的用户进入横向时您的宽度会有所不同 mode.This 在 viewWillAppear:

之后被调用
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    screenWidth =  UIScreen.mainScreen().bounds.width
    screenHeight = UIScreen.mainScreen().bounds.height
  }

然后:-

如果您正在初始化和声明您的按钮以编程方式

print(self.screenWidth)

self.imageButton.frame.size = CGSizeMake(self.screenWidth,240)

如果您使用 AutoLayout 作为约束,则:-

  • 在 class

    中创建按钮宽度限制的 @IBOutlet
    @IBOutlet weak var widthConstraint: NSLayoutConstraint!
    
  • 然后相应地设置它。

     widthConstraint = self.screenWidth
    

Note: For conditions not using Auto Layout, when views are embedded within a view the CGRectMake function will only be executed for the parent view and not for the child view.

如果需要使用CGRectMake执行操作,需要禁用自动布局