如何从另一个类访问UIView的宽度和高度?

时间:2019-06-19 22:59:20

标签: ios swift

我正在使用UIPresentationController制作自定义动画。我试图做到这一点,以使当按钮按下时切换到下一个视图控制器时,显示的视图控制器将占用前一个视图控制器中UIViews之一的宽度。我需要帮助的是如何从我的UIPresentationController类访问UIView的宽度和高度。

在View Controller中:

@IBOutlet weak var buttonView: UIView!

func width() -> CGFloat {
    return buttonView.frame.size.width
}

func height() -> CGFloat {
    return buttonView.frame.size.height
}

在Presentation Controller中:

override func size(forChildContentContainer container: UIContentContainer, withParentContainerSize parentSize: CGSize) -> CGSize {

    let vc = ViewController()
    return CGSize(width: vc.width(), height: vc.height())
}

我目前遇到的错误是当我返回buttonView.frame.size.width或buttonView.frame.width时,它意外地返回nil作为可选值。但是,宽度不是可选值,如果我将其打印出来,它不会返回nil。它不允许我访问变量以在视图控制器范围之外使用。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

即使您初始化了视图控制器,按钮的iboutlet也尚未初始化。因此,当您调用width函数时,您正在访问一个非可选属性的nil。装入笔尖时,将初始化Iboutlet。

这是从另一个视图控制器访问视图的方法。

call IBOutlet UIButton from one class to another Viewcontroller

答案 1 :(得分:0)

在UIPresentationController的子类中,您可以执行以下操作:

if let myVc = presentingViewController as? MyCustomVc {
    let myViewWidth = myVc.myCustomView.frame.width
}