分类目录归档:iOS

iOS UITableView estimatedHeight为0导致的系列问题


现在项目中TableView基本都是使用cell自适应高度,这当然需要依赖cell子控件的约束,然后设置tableView的estimatedRowHeight预估高度即可。 由于我的粗心导致很奇怪的2个问题: 1.在insert或delete某个cell时会导致某些cell高度为0; 2.第一次单独插入某个cell时的动画很奇怪,可以说刷新的很不Apple。

我以为是cell子控件的布局没有依赖好导致的,经过仔细的排查,并未发觉布局存在问题,最终发觉estimatedRowHeight竟然是0,将其修改为一个差不多的值时,这两个问题解决了。

Read more

iOS系统定位权限弹出框和跳转系统设置


项目要做自定义没开启定位的弹框,但是发现当如果没有定位权限,会弹出的Alert,并点击设置alert上的设置后,可以跳转到系统的定位设置页面的现象,根据调研后可以得到以下结论:

  • 1,改Alert为系统级别Alert,为系统控制弹出,弹出的触发条件为,在需要定位时,直接调用定位接口,系统判断当前定位总开关未开启,则会提示用户是否设置定位功能,用户点击后,跳转系统的定位设置页面。 tu
  • 2,该Alert只能弹出提示两次。
    • 不管用户点击了“设置”还是“取消”按钮,当两次弹出后,以后即使系统级别的定位总开关没开启,也不会再次提示,要再次显示,需要卸载客户端,再次安装。
    • 用户如果在关闭定位总开关时...

Read more

iOS实时检测设备方向,并更新屏幕方向


  • 传感器 使用设备的传感器,采用了DeviceMotion这个方法来获取传感器的信息
/// 开启屏幕旋转的检测
- (void)startListeningDirectionOfDevice {
    if (self.motionManager == nil) {
        self.motionManager = [[CMMotionManager alloc] init];
    }

    // 提供设备运动数据到指定的时间间隔 刷新数据的评率
    self.motionManager.deviceMotionUpdateInterval = 0.3;

  ...

Read more

iOS分类中实现 weak


如何在分类中以 weak 的内存管理策略去引用一个对象。 由于在分类中添加属性的内存管理策略中没有 weak 属性,但是有一个 OBJC_ASSOCIATION_ASSIGN,它类似我们常用的 assign,assign 策略的特点就是在对象释放以后,不会主动将应用的对象置为 nil,这样会有访问僵尸对象导致应用奔溃的风险。

解决方法:创建一个替身对象,我们可以在分类中以 OBJC_ASSOCIATION_RETAIN_NONATOMIC 的策略来强引用替身对象,然后在替身对象中以 weak 的策略去引用我们真实需要保存的对象。这样就能解决这个可能导致奔溃的问题了。

Read more

Xcode 10 beta3 Error: Multiple commands produce


最近开发一直在使用Xcode10 beta版本的,今天升级到Xcode10 beta3,但是在编译项目时编译失败,报错内容:

error: Multiple commands produce '/Users/xiaoyuan/Library/Developer/Xcode/DerivedData/Boobuz-gnxeuntgkenwgdgycqnvabqubafh/Build/Products/Debug-iphoneos/Boobuz.app':
1) Target 'Boobuz' has create directory command with output '/Users/...

Read more

iOS12 Shortcuts beta app


在 WWDC18 上,Apple发布了 iOS 12,其中有一项重要的特性:Workflow app 将要升级为 Shortcuts app。Shortcuts app 并没有在发布 iOS 12 beta1 时发布,而是在2018年7月5日,Apple 开发者网站发布了 Shortcuts Beta 1 Release,可以在Apple 开发者网站请求测试资格,apple 则会发一封邮箱到你的apple id邮箱中,通过iOS的测试平台 TestFlight 安装即可。

通过WWDC18了解到 Shortcuts 和 Siri 若能够更好地配合工作,将在自动化场景下发挥出更多的魔力...

Read more

Ubuntu 16.0 gitosis配置记录


  • 给git服务器的管理员生成公钥 在自己的电脑上生成一个ssh的公钥,命令如下:
    ssh-keygen -t rsa
    根据提示直接按回车,当然也可以给秘钥起名或者设置密码, 生成的公钥和私钥默认是在你电脑的当前用户下的.ssh目录下
  • 把公钥pub文件拷贝到git服务器
    scp ~/Desktop/.ssh/admin.pub git@yhub.net:/home/git/admin.pub

服务器中gitosis安装完成的前提下,把克隆Gitosis的控制仓库到本地

git clone git@yhub.net:gitosis-admin.git
  • gitosis-admin目录结构...

Read more

iOS 获取屏幕锁定状态


在开发中,有时候我们需要让某些特定的页面为横屏展示,而从这个页面离开或者进入其他页面时为竖屏,起初我仅仅依赖了UIViewController的屏幕旋转方法简单的处理,但是当需求慢慢在变化时,我发觉这并不能满足我的需求:

比如导航页需要横屏展示,但是从导航页上面某个按钮跳转的页面需要竖屏展示,而再从这个页面返回到导航页时,如果屏幕为竖屏且用户关闭了屏幕旋转锁定,则导航页应继续展示横屏。

下面笔记写的比较乱,可直接查看Demo in Github

屏幕旋转的方案

我现在使用的解决方案是CMMotionManager,启动设备的运动更新,通过给定的队列向给定的处理程序提供数据,对屏幕旋转的...

Read more