2017-01-26 7 views
3

, так что в описании говорится, что я работаю над приложением iOS и хотел создать виджет Today Extension для него. Моя проблема в том, что я хотел изменить высоту до 200. После исследования единственного решения, которое я нашел, было использовать атрибут preferredContentSize, но это не работало для меня.Swift Today Extension preferredContentSize не изменяет размер

Я хочу добавить tableView к нему, и я хотел, чтобы он был полностью показан. Я добавил метод viewDidLoad, чтобы вы могли видеть, где таблица создана и добавлена.

override func viewDidLoad() { 
    super.viewDidLoad() 

    let myDefaults = UserDefaults(suiteName: "group.com.iOSApp")! 
    let eventData = myDefaults.object(forKey: "events") 

    if eventData != nil { 
     shownEvents = NSKeyedUnarchiver.unarchiveObject(with: eventData as! Data) as! [Event] 
    } 

    eventTable = UITableView() 
    eventTable.register(TodayViewCell.self, forCellReuseIdentifier: "cell") 
    eventTable.separatorColor = UIColor.primary() 
    view.addSubview(eventTable) 
    eventTable.translatesAutoresizingMaskIntoConstraints = false 

    var tempX = NSLayoutConstraint(item: eventTable, attribute: .leading, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0) 
    var tempY = NSLayoutConstraint(item: eventTable, attribute: .top, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: .top, multiplier: 1, constant: 0) 
    NSLayoutConstraint.activate([tempX, tempY]) 

    tempX = NSLayoutConstraint(item: eventTable, attribute: .trailing, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0) 
    tempY = NSLayoutConstraint(item: eventTable, attribute: .bottom, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0) 
    NSLayoutConstraint.activate([tempX, tempY]) 


    eventTable.delegate = self 
    eventTable.dataSource = self 

    eventTable.reloadData() 

    preferredContentSize.height = 200 


} 

ответ

6

в ИО 10 настройки preferredContentSize.height непосредственно не работает

после прошивки 10, есть два типа, чтобы показать расширение сегодняшней статьи

корпус 1 Показать больше (расширенный тип, можно задать пользовательскую высоту)

корпус 2 Показать меньше (компактный тип, имеет по умолчанию hegiht)

enter image description here

What's new in iOS 10

так что вы должны обеспечить высоту для прошивки 10 более ранних версий и прошивки 10

if #available(iOSApplicationExtension 10.0, *) { 
     //setup display mode (show more(.expended) or show less(.compact)) 
     extensionContext?.widgetLargestAvailableDisplayMode = .expanded 
    } else { 
     // Fallback on earlier versions 
     preferredContentSize.height = 200 
    } 

и shoulde реализовать для пользовательской высоты

func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {

@available(iOSApplicationExtension 10.0, *) 
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) { 
    switch activeDisplayMode { 
    case .expanded: preferredContentSize.height = 200 
    case .compact: preferredContentSize = maxSize 
    } 
}