切换到横向时,Tableview 将约束更改为全屏

Posted

技术标签:

【中文标题】切换到横向时,Tableview 将约束更改为全屏【英文标题】:Tableview change constraints to full screen when switch to landscape 【发布时间】:2018-11-22 04:02:03 【问题描述】:

基本上,我有一个表格视图,当我切换到横向时,我希望它将表格视图设置为全屏,当我将其切换回纵向时,它应该恢复为默认约束。如果我删除断点,它会起作用。

但是,当我将其从横向切换回纵向时,它不会恢复为默认值。当我将它切换回纵向时,我正在编辑它的约束以执行我想要的操作。但是,我对其他解决方案持开放态度。请告诉我我应该怎么做。我使用UIViewAlertForUnsatisfiableConstraints 添加了断点,就像这张图片一样:

override func viewDidLoad() 
   super.viewDidLoad()
   parseData(noOfPosts:90)

   TableView.delegate = self
   TableView.dataSource = self
   TableView.tableFooterView = UIView()

   let myTop2Constraint:NSLayoutConstraint = TableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50)
   let myBtm2Constraint:NSLayoutConstraint = TableView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 50)

   myTop2Constraint.isActive = true
   myBtm2Constraint.isActive = true

   if(UIDevice.current.orientation.isLandscape)
      myTop2Constraint.isActive = false
      myBtm2Constraint.isActive = false
   


override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) 
   let myTop2Constraint:NSLayoutConstraint = TableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50)
   let myBtm2Constraint:NSLayoutConstraint = TableView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 50)
   let myTopConstraint:NSLayoutConstraint = TableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0)
   let myBtmConstraint:NSLayoutConstraint = TableView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0)

   myTopConstraint.isActive = false
   myBtmConstraint.isActive = false
   myTop2Constraint.isActive = false
   myBtm2Constraint.isActive = false

   if(UIDevice.current.orientation.isLandscape)
      self.catIsuSemasa.isHidden = true
      self.catOthers.isHidden = true
      self.catSocial.isHidden = true
      self.catPolitics.isHidden = true
      if(myTop2Constraint.isActive)
         print("error1?")
         myTop2Constraint.isActive = false
         print("error2?")
         myBtm2Constraint.isActive = false
         print("error3?")
         myTopConstraint.isActive = true
         myBtmConstraint.isActive = true
      else
         TableView.removeAllConstraints()
         myTopConstraint.isActive = true
         myBtmConstraint.isActive = true
      
   else
      self.catIsuSemasa.isHidden = false
      self.catOthers.isHidden = false
      self.catSocial.isHidden = false
      self.catPolitics.isHidden = false
      if(myTopConstraint.isActive)
         print("error")
         myTopConstraint.isActive = false
         print("error2")
         myBtmConstraint.isActive = false
         print("error3")
         myTop2Constraint.isActive = true
         print("error4")
         myBtm2Constraint.isActive = true
         print("run?")
      
   


extension UIView 
    func removeAllConstraints() 
        self.removeConstraints(self.constraints)
        for view in self.subviews 
            view.removeAllConstraints()
        
    

【问题讨论】:

为什么以编程方式设置约束,您可以通过情节提要使用大小类(因特征而异)来做到这一点? this link 可能会帮助您在情节提要中为横向和纵向设置不同的约束。 我正在调查,谢谢指点 @JatinKathrotiya 嘿,感谢您为我指明了正确的方向,我设法使用可变特性解决方案来解决我的问题。如果您将其发布为答案的评论,则将使其成为解决方案 最欢迎,我添加为答案,以便对其他用户有帮助 【参考方案1】:

应用程序支持横向和纵向,那么我们不需要以编程方式设置约束,我们可以通过使用故事板的大小类(因特征而异)来实现相同的目标。通过使用尺寸类,我们可以创建自适应布局设计。我们可以为横向和纵向应用程序设置不同的约束。

请查看以下教程链接:

Tutorial Link

【讨论】:

以上是关于切换到横向时,Tableview 将约束更改为全屏的主要内容,如果未能解决你的问题,请参考以下文章

MPMoviePlayerController:无法从全屏切换到嵌入式

如何将视图从纵向模式更改为横向模式并锁定它?

swift 3 - 旋转到横向时全屏播放视频

当我从纵向模式更改为横向时,按钮背景图像消失

只有在将方向更改为横向并返回纵向后,纵向布局才能正确显示

如何将我的模拟器从纵向模式更改为横向模式? [复制]