我有TabBarController
连接到一个类class MainViewController: UIViewController
的视图控制器
MainViewController
具有以下约束作为属性:
@IBOutlet weak var ContainerBottomConstraint: NSLayoutConstraint!
以及修改约束的以下方法:
func resizeContainer() {
ContainerBottomConstraint.constant = Constants.playingNowBarHeight
}
我想从resizeContainer()
致电TabBarController
现在我正试图从viewDidLoad()
这样调用它
if let vc = viewControllers?[0] as? MainViewController {
vc.resizeContainer()
}
但是我得到了
Fatal error: Unexpectedly found nil while unwrapping an Optional value
在ContainerBottomConstraint.constant = Constants.playingNowBarHeight
答案 0 :(得分:1)
public function Hero()
{
super();
// If stage is available, go straight to initializer.
// Otherwise subscribe and wait for the stage to get available.
if (stage) onStage(null);
else addEventListener(Event.ADDED_TO_STAGE, onStage);
}
private function onStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onStage);
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
up.visible = false;
startMarker.visible = false;
}
如果您将约束声明为视图控制器的实例属性,则需要使@IBOutlet lazy var containerBottomConstraint = containerView.bottomAnchor.constraint(equalTo: someView.topAnchor)
var
和必须初始化它。只有在使用时才会读取延迟变量。
然后在视图控制器中激活它:
lazy
现在该约束是一个实例属性。
答案 1 :(得分:0)
通过向MainViewController
添加属性并在TabBarController
中更新属性来解决问题,然后根据viewDidLoad
中MainViewController
中的属性值更新约束。
在MainViewController
var shouldResize: Bool = false
private func initView(){
if shouldResize {
ContainerBottomConstraint.constant = Constants.playingNowBarHeight
} else {
ContainerBottomConstraint.constant = 0
}
}
在TabBarController
if let vc = viewControllers?[0] as? MainViewController {
vc.shouldResize = true
}