UIAlertController's actionSheet Type gives constraint error

在使用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. 
(
    ""
)

Will attempt to recover by breaking constraint 


Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in  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 Type gives constraint error)