美文网首页
UIAlertController's actionSheet

UIAlertController's actionSheet

作者: Flame_Dream | 来源:发表于2019-10-14 17:57 被阅读0次

    在使用UIAlertController的preferredStyle = actionSheet过程中出现NSLayoutConstraint错误。

    一、问题代码如下:

     let sheet = UIAlertController(title:nil, message: nil, preferredStyle: .actionSheet)
            // 本地图片
     let cameraAction = UIAlertAction(title: JW_LOCAL(key: "Camera Roll"), style: .default) { (action) in
     
      }
     let takePhotoAction = UIAlertAction(title: JW_LOCAL(key: "Take Photo"), style: .default) { (action) in
     }
            
     let deleteAction = UIAlertAction(title: JW_LOCAL(key: "Delete Photo"), style: .default) { (action) in
    
      }
            
            
    let cancelAction = UIAlertAction(title: JW_LOCAL(key: "Cancel"), style: .cancel, handler: nil)
    sheet.addAction(takePhotoAction)
    sheet.addAction(cameraAction)
            
    sheet.addAction(deleteAction)
    sheet.addAction(cancelAction)
            
    self.present(sheet, animated: false, completion: nil)
    

    二、Log输出的error信息:

     [LayoutConstraints] Unable to simultaneously satisfy constraints.
        Probably at least one of the constraints in the following list is one you don't want. 
        Try this: 
            (1) look at each constraint and try to figure out which you don't expect; 
            (2) find the code that added the unwanted constraint or constraints and fix it. 
    (
        "<NSLayoutConstraint:0x600000495b30 UIView:0x7f9f58e17040.width == - 16   (active)>"
    )
    
    Will attempt to recover by breaking constraint 
    <NSLayoutConstraint:0x600000495b30 UIView:0x7f9f58e17040.width == - 16   (active)>
    
    Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
    The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
    

    三、解决方法:

    在Sheet的Present之后添加代码如下:就能解决问题

    self.present(sheet, animated: false, completion: nil)
    
    // Present之后添加代码如下        
    sheet.view.subviews.flatMap({$0.constraints}).filter{ (one: NSLayoutConstraint)-> (Bool)  in
               return (one.constant < 0) && (one.secondItem == nil) &&  (one.firstAttribute == .width)
            }.first?.isActive = false
    

    相关文章

      网友评论

          本文标题:UIAlertController's actionSheet

          本文链接:https://www.haomeiwen.com/subject/wbvrzftx.html