2017-01-26 5 views
3

so wie die Beschreibung sagt Ich arbeite an einer iOS App und wollte ein Today Extension Widget dafür erstellen. Mein Problem ist, dass ich die Höhe auf 200 ändern wollte. Nach der Recherche war die einzige Lösung, die ich fand, die Verwendung des preferredContentSize -Attributs, aber das funktionierte nicht für mich.Swift Today Extension preferredContentSize nicht skalieren

Ich möchte ein TableView hinzufügen und ich wollte es vollständig angezeigt werden. Ich habe die viewDidLoad-Methode hinzugefügt, damit Sie sehen können, wo die Tabelle erstellt und hinzugefügt wurde.

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 


} 

Antwort

6

In iOS 10 Einstellung preferredContentSize.height nicht direkt

arbeiten

nach iOS 10 gibt es zwei Arten heute Erweiterung zeigen

Fall 1 Mehr anzeigen (erweitert Typ können benutzerdefinierte Höhe eingestellt)

Fall 2 anzeigen Weniger (kompakte Bauform, hat Standard hegiht)

enter image description here

What's new in iOS 10

so sollten Sie Höhe für iOS 10 frühere Versionen bieten und für iOS 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 
    } 

und shoulde für benutzerdefinierte Höhe

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 
    } 
} 
implementieren
Verwandte Themen