首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整今日应用扩展的高度

调整今日应用扩展的高度
EN

Stack Overflow用户
提问于 2016-10-11 11:28:33
回答 1查看 749关注 0票数 0

我有一个Today小部件,它根据在主应用程序中选择的一对车站显示即将到来的火车发车。鉴于出发时间随时间变化,我在viewWillAppear中有一个获取新时间并重新填充tableView的单元格的API调用。

目前,这个小部件的起始高度看起来是150-200点。我的更新逻辑尝试设置preferredContent高度,但这不起作用。我将tableView约束到顶部/底部布局辅助线。在告诉它一个新的preferredContent后,我尝试将tableView的框架高度重置为主视图。

大概,我的网络的回调发生在viewWillAppear之后,所以我调用layoutIfNeeded来触发viewDidLayoutSubviews,在那里我重新加载了表视图。

这些都不能让我得到我想要的东西。一个由出发时间填充的表视图,它是N times the height of a cell,其中N是我的API调用最近获取的出发次数。

我遗漏了什么?任何帮助都将不胜感激。

编辑:

这是我尝试重新调整扩展高度的相关代码。

代码语言:javascript
复制
 override func viewWillAppear(_ animated: Bool) {
 
      dao.fetchTrips { (trips) in
        
         self.tripsDataSource.dataStore = trips
 
         let numTrips = trips?.count
         let rowHeight = 44 // static
         let h = numTrips! * rowHeight
         
         self.preferredContentSize = CGSize(width: 0, height: h)
 
         self.view.layoutIfNeeded()
  
      }
      
   }
   
   

   override func viewDidLayoutSubviews() {
      self.tableView.reloadData()
   }

我注意到在完成处理程序中调用layoutIfNeeded之后,不会调用viewDidLayoutSubviews。尽管这可能不是问题所在,因为在设置新的preferredContentSize之后,应用程序扩展主视图不会改变。

EN

回答 1

Stack Overflow用户

发布于 2016-10-12 13:00:17

我也有同样的问题。几分钟前我解决了这个问题。widget的默认视图不显示最大高度。您需要按下显示更多,旁边的应用程序标题。

删除您的代码,只需将此代码添加到您的小部件类中,然后在else分支上设置您想要的高度。当你点击show less/ show more时,它将会调用。

代码语言:javascript
复制
@available(iOSApplicationExtension 10.0, *)
    func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize){
        if (activeDisplayMode == NCWidgetDisplayMode.compact) {
            self.preferredContentSize = CGSize(width: 0, height: maxSize.height);
        }
        else {
            self.preferredContentSize = CGSize(width: 0, height: self.tableView.contentSize.height);
        }
    }

编辑:我的代码:

代码语言:javascript
复制
import UIKit
import NotificationCenter

let groupappname = "group.***.***"


class MyCollectionViewController: UICollectionViewController , NCWidgetProviding,UICollectionViewDelegateFlowLayout {

    var isEmptyData = true
    var array = NSMutableArray()
    var defaults = UserDefaults.init(suiteName: groupappname)!

    override func viewDidLoad() {
        super.viewDidLoad()


        if #available(iOSApplicationExtension 10.0, *) {
            self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded
        } else {
            // Fallback on earlier versions
        }


        registerObserver()
        refreshData()

    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        removeObserver()
    }

    func refreshData(){

        self.preferredContentSize = (self.collectionView?.contentSize)!
        #somecode
        self.collectionView?.reloadData()
    }

    func refreshData_NoData(){
        self.preferredContentSize = (self.collectionView?.contentSize)!
        self.collectionView?.reloadData()
    }
    func widgetPerformUpdate(completionHandler: @escaping (NCUpdateResult) -> Void) {
        print("widgetperformupdate")
        completionHandler(NCUpdateResult.newData)
    }
    @available(iOSApplicationExtension 10.0, *)
    func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize){
        if (activeDisplayMode == NCWidgetDisplayMode.compact) {
            self.preferredContentSize = CGSize(width: 0, height: maxSize.height)
        }
        else {
            self.preferredContentSize = CGSize(width: 0, height: (self.collectionView?.contentSize.height)!)
        }
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    // MARK: UICollectionViewDataSource

    override func numberOfSections(in collectionView: UICollectionView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }


    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of items

        return array.count
    }
    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        #somecode
        self.preferredContentSize = collectionView.contentSize

        return cell
    }


}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39970091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档