如何基于swift4中的视图内容使视图高度为0

时间:2019-02-15 06:01:55

标签: ios swift4

我是iOS新手。我将收集一系列产品。每个产品的最小详细信息为0至15。每当我们单击一个产品时,该产品的相关详细信息都应显示在其他产品上视图控制器。如果该产品有5个详细信息,则仅应显示5个详细信息。其余的详细信息字段的高度应变为0。这是我的要求。我尝试了此操作,但出现了类似“线程1:信号SIGABRT”的错误。控制台“无法将类型'NSNull'(0x107e57de0)的值强制转换为'NSString'(0x106ef25d8)。 2019-02-15 11:28:51.808090 + 0530 PlanetZoomApp [6777:85237]无法将类型'NSNull'(0x107e57de0)的值强制转换为'NSString'(0x106ef25d8)。” 如果有人帮助我,那就太好了。谢谢。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let lmp = storyboard.instantiateViewController(withIdentifier: "LocatemypicViewController") as!  


 if let desc:String = (dictobj["description"] as! String){

            print(desc)

            lmp.des = desc
        }else{
            lmp.descriptionviewheight.constant=0
        }

self.navigationController?.pushViewController(lmp, animated: true)

    }

1 个答案:

答案 0 :(得分:0)

在使用if let时,通常不应使用强制转换! ,第二个问题是在调用viewDidLoad之前,约束没有初始化。因此您可以将值保存在某个地方,并在内部LocatemypicViewController viewDidLoad中使用它。

总体而言,我建议您将dictobj [“ description”]传递给下一个视图控制器,并在viewDidLoad内部执行逻辑,并避免在父视图控制器上执行另一个视图的逻辑。

class ViewController1:UIViewController {
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let lmp = storyboard.instantiateViewController(withIdentifier: "LocatemypicViewController") as!  


        if let desc:String = (dictobj["description"] as? String){

            print(desc)

            lmp.des = desc
        }else{
            lmp._descriptionviewheight = 0
        }

        self.navigationController?.pushViewController(lmp, animated: true)

    }
}

class LocatemypicViewController:UIViewController {
   var _descriptionviewheight = 0

   override func viewDidLoad() {
      descriptionviewheight.constant = _descriptionviewheight
   }

}