UIAlertController:每当我尝试启动UIAlertcontroller时,都没有定义UICollectionViewFlowLayout警告

时间:2015-11-19 12:33:30

标签: ios swift swift2 uialertcontroller

我正在使用UIAlertController来获取用户输入和更新表格单元格。每当我尝试创建警报时,我都会在控制台

中收到以下警告
  

2015-11-19 17:51:42.034 SimpleTableView [5488:584215]未定义UICollectionViewFlowLayout的行为,因为:

     

2015-11-19 17:51:42.035 SimpleTableView [5488:584215]项目高度必须小于UICollectionView的高度减去截面插入顶部和底部值,减去内容插入的顶部和底部值。 / p>      

2015-11-19 17:51:42.036 SimpleTableView [5488:584215]相关的UICollectionViewFlowLayout实例是< _UIAlertControllerCollectionViewFlowLayout:0x7fd0a057c3d0>,并附加到; layer =; contentOffset:{0,0}; contentSize:{0,0}>集合视图布局:< _UIAlertControllerCollectionViewFlowLayout:0x7fd0a057c3d0>。   2015-11-19 17:51:42.036 SimpleTableView [5488:584215]在UICollectionViewFlowLayoutBreakForInvalidSizes上创建一个符号断点,以便在调试器中捕获它。

如众多博客中所述,实施非常简单,

func displayAlertInfo(){
    let alertController = UIAlertController(title: "New Race", message: "Type in a new race", preferredStyle: .Alert)
    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (_) in
        alertController.dismissViewControllerAnimated(true, completion: nil)
    }
    let addAction = UIAlertAction(title: "Add", style: .Default) { (_) in
        let textFieldInput = alertController.textFields![0] as UITextField
        let newRace = textFieldInput.text?.capitalizedString
        DataManager.sharedInstance.addRace(species: self.species, race: newRace!)
        let newIndexPath = NSIndexPath(forRow: self.races.count - 1, inSection: 0)
        self.racesTableVew.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    }

    alertController.addTextFieldWithConfigurationHandler { (textField) -> Void in
        textField.placeholder = "New Race"
    }

    alertController.addAction(cancelAction)
    alertController.addAction(addAction)

    self.presentViewController(alertController, animated: true, completion: nil)
}

我在导航按钮上调用此功能。警报显示正确,但每次我尝试点击创建警报的按钮时,我都会继续收到此警告。 我做错了什么或者我跳过了什么?

编辑:添加屏幕截图:通过tableView从导航项按钮调用警报。

enter image description here

3 个答案:

答案 0 :(得分:13)

您需要致电

alertcontroller.view.setNeedsLayout()

之前

self.presentViewController(alertController, animated: true, completion: nil)

资料来源:https://forums.developer.apple.com/thread/18294(最后答案)

答案 1 :(得分:2)

我遇到了类似的问题:在iPhone 6 Plus肖像上工作正常,在横向上失败了。我做了一个小改动:从

 message: nil,  

为:

 message: "this is a nice long line of crapthis is a nice long line of crapthis is a nice long line of crap",

..这足够长,可以换行,添加两个换行符。我的问题解决了。但是,没有至少两次换行的较短信息仍会导致错误发生。

然后我发现了

 message: "\n\n"  

工作得很好,但是单个换行符的消息失败了。如果我设置title:nil,我需要在消息中添加更多新行。它似乎与警报,标题和消息的总高度相关。

注意:没有文本字段的其他警报也没有显示相同的问题。在我的例子中,setNeedsLayout()没有任何区别。

(当然,添加许多行会使警报太高,一旦你包含弹出式键盘就会出现在横向较小的iPhone上,产生相同的错误消息。所以我最后添加了这些行条件是屏幕的高度和宽度大于设定值。)

答案 2 :(得分:1)

我的屏幕上也只有iphon6 plus屏幕也有同样的问题。请检查,如果你没有传递空标题,如果标题是空的,则传递给它,如:

 UIAlertController *confirmAlert = [UIAlertController alertControllerWithTitle:nil message:displayMessage preferredStyle:UIAlertControllerStyleAlert];
  

而不是

  UIAlertController *confirmAlert = [UIAlertController alertControllerWithTitle:@"" message:displayMessage preferredStyle:UIAlertControllerStyleAlert];

它解决了我的问题。祝你好运..