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. 
(
    "<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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值