美文网首页
Widget遇到的坑

Widget遇到的坑

作者: Money_YC | 来源:发表于2020-09-29 19:45 被阅读0次

前言

前段时间开发的Widget也上线了,今天总结下开发以来遇到的一些问题。
先附上demo地址[Widget]https://github.com/moneyYouCai/NewWidget-iOS14

问题

-适配问题


widget尺寸.png

上图可以看到Widget在不同分辨率下的尺寸都是不同,宽高比也是完全不同,这让我们的适配就不会特别的准确。
本人在写的时候是用Widget高度为标准来进行简单适配,以宽度为329的组件为1:1适配点,虽然不是特别好的适配方式,但看起来也较为可以,如果大家有其他更好的适配方式欢迎指正学习。

func RatioLen(_ length: CGFloat) -> CGFloat {
  if iPhoneHeight == 812 {
    return length
  }
  else if iPhoneHeight == 896 {
    return (length * 360 / widgetTargetWidth)
  }
  else if iPhoneHeight == 736 {
    return (length * 348 / widgetTargetWidth)
  }
  else if iPhoneHeight == 667 {
    return (length * 321 / widgetTargetWidth)
  }
  else if iPhoneHeight == 568 {
    return (length * 292 / widgetTargetWidth)
  }
  return length
}

如果App做了适配ipad,对于Widget来说不同考虑很服,因为苹果对与ipad上显示widget 也和上面尺寸是一样的。

-图片加载问题
Widget中的图片下载是同步下载,如果图片数量过多,则组件页面内容显示会特别慢。如果能在图片加载完之后再去刷新widget,则是一种比较合适的办法。
在这里我说一下思路,大家可以一起参考一下。我们在下载图片的时候运用

DispatchQueue.global(qos: .background).async

当图片下载完之后回到主线程中去刷新Widget

DispatchQueue.main.async {
    WidgetCenter.shared.reloadAllTimelines()
}

当然这里要使用一个变量templeImage来判断图片是否加载完成。

-低版本手机打开崩溃问题
这个问题相信大家也都遇到过,在低于iOS14系统的手机上运行会直接崩溃,崩溃原因说是找不到WidgetKit,当然低统是没有WidgetKit这个库的。解决办法其实也很简单,使用canImport,具体代码如下

#if canImport(WidgetKit)
import WidgetKit
#endif

class WidgetReloadData: NSObject {
    @objc public func fetch() {
      if #available(iOS 14.0, *) {
          #if arch(arm64) || arch(i386) || arch(x86_64)
           WidgetCenter.shared.reloadAllTimelines()
          #endif
      }
    }
}
接着把WidgetKit.framework的status设置成Optional就可以了 status.png

-同过Url链接跳转主App崩溃问题
如果url里面有json字符串,直接使用URL(string: url!),一般都会崩溃,需要Encoding

 Link(destination: URL(string: url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!) {
}

笔者最近也还在研究图片加载以及适配问题,希望能和大家一起学习。

相关文章

  • Widget遇到的坑

    前言 前段时间开发的Widget也上线了,今天总结下开发以来遇到的一些问题。先附上demo地址[Widget]ht...

  • swift Widget踩坑 记录

    记录一下做Widget 遇到的坑 1.Cannot find type 'ConfigurationIntentH...

  • Widget、3DTouch、自动化打包

    这篇文章主要记录开发及打包Widget项目时遇到的坑,及解决方案。具体开发过程可参考:Widget开发3DTouc...

  • widget 、 3DTouch遇到的坑

    一、说明iOS8之后 widgetiOS9 之后 3D Touch 二、widgetwidget 系统给的标准的高...

  • iOS小组件Widget踩坑

    上篇文章是对widget的整体调研,真正上项目会有很多坑 运行主项目或者单独运行widget都可以使widget代...

  • iOS Widget证书配置详解(天才式教程)

    最近要开发Widget功能,遇到了好多好多的坑。。。。问题全出在证书配置上,看了网上的教程也是一脸懵逼,官网的教程...

  • Android widget使用心得

    因为公司项目需求,需要实现widget 来刷新数据,稀里糊涂的做,然后踩了很多坑,写个文章来总结下widget一些...

  • Flutter携程APP总结

    功能展示 首页实现 搜索页面实现 旅拍页面 DAO 采坑 启动屏 自定义Widget 打包 功能展示 DAO 采坑...

  • 在Objective-C 项目中创建iOS小组件

    iOS14出来了有一段时间,小组件当仁不让火得不要不要的 一步步摸索下来,这里记录一下捣鼓widget时遇到的坑和...

  • Android Widget 开发踩坑

    关于Android widget 小部件开发的文章,搜到的都比较老旧,并且很多已经不适用于高版本的android系...

网友评论

      本文标题:Widget遇到的坑

      本文链接:https://www.haomeiwen.com/subject/uhzeuktx.html