Виджет «Сегодня» — конфликт с ограничением автомакета при блокировке устройства

Я реализую виджет «Сегодня». Это мой первый раз, когда я получаю доступ к виджету «Сегодня».

Я создал свой виджет «Сегодня» программно, без использования раскадровки. Узнал из этого POST, что я сделал: 1. изменил информационный список 2. включил «Встроенный контент содержит код Swift» 3 .добавьте @objc(HGTodayViewController) после импорта, где HGTodayViewController — мой начальный контроллер представления.

в loadView в HGTodayViewController

var mainView:HGTodayView!

override func loadView() {
  self.mainView = HGTodayView(frame: CGRectZero)
  self.view = self.mainView
}

в HGTodayView:

override init(frame: CGRect) {
  super.init(frame: frame)

  // self
  self.translatesAutoresizingMaskIntoConstraints = false

  // Subview
  self.tableView = UITableView()
  self.tableView.translatesAutoresizingMaskIntoConstraints = false
  self.addSubview(self.tableView)

  // Constraint
  self.setConstraint()

  // debug
  self.tableView.backgroundColor = UIColor.redColor()
}

В методе setConstraint HGTodayView:

  func setConstraint() {
    // self.height
    let selfHeight = NSLayoutConstraint(
      item: self,
      attribute: .Height,
      relatedBy: .Equal,
      toItem: nil,
      attribute: .NotAnAttribute,
      multiplier: 1, constant: 200)
    // avoid constraint conflict with "UIView-Encapsulated-Layout-Height"
    // https://stackoverflow.com/a/25795758/2581637
    selfHeight.priority = 999
    self.addConstraint(selfHeight)

    let viewDict = Dictionary(dictionaryLiteral: ("tableView", self.tableView))

    let tableViewHorizontallyLayout = NSLayoutConstraint.constraintsWithVisualFormat(
      "|[tableView]|",
      options: NSLayoutFormatOptions.DirectionLeadingToTrailing,
      metrics: nil, views: viewDict)
    self.addConstraints(tableViewHorizontallyLayout)

    let tableViewVerticallyLayout = NSLayoutConstraint.constraintsWithVisualFormat(
      "V:|[tableView]|",
      options: NSLayoutFormatOptions.DirectionLeadingToTrailing,
      metrics: nil, views: viewDict)
    self.addConstraints(tableViewVerticallyLayout)
  }

Поскольку я не настроил для него делегата табличного представления, я подозреваю, что в данный момент он не генерирует никаких ячеек и отображает красное табличное представление, как и предполагалось. Однако, если я нажму кнопку блокировки, чтобы заблокировать устройство, в консоли немедленно появится сообщение о конфликте ограничений.

Вот конфликт в сообщении ограничения:

2016-06-01 17:47:48.311 HGToday[4549:462502] 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:0x14fd50eb0 V:|-(4)-[UIInputSetContainerView:0x14fd5f570]   (Names: '|':UITextEffectsWindowHosted:0x14fe6f670 )>",
    "<NSLayoutConstraint:0x14fd6c7c0 'UIInputWindowController-top' V:|-(0)-[UIInputSetContainerView:0x14fd5f570]   (Names: '|':UITextEffectsWindowHosted:0x14fe6f670 )>"
)
Will attempt to recover by breaking constraint 
    <NSLayoutConstraint:0x14fd50eb0 V:|-(4)-[UIInputSetContainerView:0x14fd5f570]   (Names: '|':UITextEffectsWindowHosted:0x14fe6f670 )>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

2016-06-01 17:47:48.335 HGToday[4549:462502] 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:0x14fd63780 V:|-(4)-[UIInputSetContainerView:0x14fe70820]   (Names: '|':UIRemoteKeyboardWindowHosted:0x14fe70490 )>",
    "<NSLayoutConstraint:0x14fd65530 'UIInputWindowController-top' V:|-(0)-[UIInputSetContainerView:0x14fe70820]   (Names: '|':UIRemoteKeyboardWindowHosted:0x14fe70490 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x14fd63780 V:|-(4)-[UIInputSetContainerView:0x14fe70820]   (Names: '|':UIRemoteKeyboardWindowHosted:0x14fe70490 )>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

Этот конфликт ограничений возникает, когда я блокирую свой телефон. Как я могу решить этот конфликт? Любая помощь приветствуется. Большое спасибо за уделенное время.


person nuynait    schedule 01.06.2016    source источник
comment
Удалось ли вам избавиться от этого конфликта NSLayoutConstraint при блокировке устройства?   -  person Rygen    schedule 01.09.2016