
实用小技术
郏国上
Object C, JavaScript, python高级研发工程师
展开
-
省市区的直辖市采用三级结构是否合理
国家民政部的省市区编码规则是:后四位为”0000“是省级单位,前两位是省级编码;城市编码是后两位是‘00’(不包括县级市),城市的编码是前两位(省级单位编码),中间两位是城市编码从”01“开始(”01“是省会城市编码);县(县级市,区是)是前两位(省级单位编码),中间来你是城市编码,后两位是具体县的编码(从”01“开始)。北京市属于省级(”1100000“),没有北京市编码”110100“,要强制把直辖市转换成三级结构,需要瞎编出来一个民政部不存在城市级编码(如北京市”110100“)。直辖市两级的好处是,原创 2025-01-14 15:33:37 · 604 阅读 · 0 评论 -
MongoDB Compass 查询出记录按照create_time从大到小排序
查询条件,Project可以设置显示或隐藏查询出的记录的字段(属性),0隐藏,1显示Sort可以设置排序顺序,-1倒序,1正序原创 2024-10-16 17:30:15 · 447 阅读 · 0 评论 -
iOS16系统根据PHAsset判断是否在云上
iOS16系统根据PHAsset判断是否在云上。[[resourceArray.firstObject valueForKey:@"locallyAvailable"] boolValue];info根本没有对应的键值PHImageResultIsInCloudKey,所以获取到的都是NO。原创 2023-08-14 09:05:47 · 619 阅读 · 0 评论 -
使用序列化和反序列化函数archivedDataWithRootObject和unarchivedObjectOfClasses的使用和遇到问题及解决方案
为何archiveRootObject和unarchiveObjectWithFile正常,而archivedDataWithRootObject和unarchivedObjectOfClasses一直报错。解决方案:遵循NSSecureCoding协议,把所有序列化的对象加入对象集合,对象的所有成员变量序列化和反序列化原创 2023-07-22 20:23:33 · 3185 阅读 · 0 评论 -
制作SDK注意事项
开发SDK一般需要三个工程:1. 研发SDK工程;2.生成SDK工程;3.SDK使用demo工程SDK一般有两大优点:1.防止别人看到代码和实现;2.组件化,提高代码复用率(SDK也算一个功能组件,和pod导入的工程一样)。提供sdk的日志开关宏(sdk内头文件定义)和头文件包含宏(对外开放的总头文件定义)。原创 2023-06-16 17:59:17 · 334 阅读 · 0 评论 -
don‘t have write permissions for the /System/Library/Frameworks/Ruby.framework
安装Hombrew,通过它安装ruby,然后修改环境变量让它成为当前的ruby。原创 2023-06-13 17:56:59 · 3589 阅读 · 0 评论 -
The version of CocoaPods used to generate the lockfile
在我们使用cocoapods加载第三方库时,有时会碰到报这个错,这很明显是告诉我们现在所使用的cocoapods版本低于第三方库所要求的。原创 2023-06-13 17:28:04 · 1970 阅读 · 0 评论 -
syntax error: unexpected end of file
syntax error: unexpected end of file。由于.sh文件的格式为dos格式原创 2023-06-12 15:17:24 · 922 阅读 · 0 评论 -
如何修改第三方库
修改第三方库最简单的是拖入工程直接修改。当然由于库间引用,导致拖入工程修改需要处理很多编译问题。指定版本后修改本地库,若别人使用时下载的库和自己的不一样。那如何不拖入工程,并且别人也能使用我们修改后的库呢?需要指定版本然后用分类。以带SceneDelegate的工程SVProgressHUD弹出框显示在左上角为例子进行解说。一般的分类是指重载方法,不定义属性。其实分类也可以定义并使用属性。只是要想分类定义属性要自己实现setter方法和getter方法。原创 2022-12-30 10:14:45 · 521 阅读 · 1 评论 -
显示广告的几种方案及缺点
1.当app首次启动,当定位完毕,请求回来。若有广告地址和广告时间就显示广告。存在的问题用户首先看到了首页,然后才显示广告。2.当app非首次启动,判断是否有上次的广告,若有就显示上次的广告。等定位和广告请求回来。若没有广告就结束广告;若有广告并且和原来的广告相同就继续显示广告;若有广告,但是和原来广告不同就切换新广告;若以前不显示广告,广告接口返回广告,就显示广告。原创 2022-12-29 16:23:27 · 753 阅读 · 0 评论 -
启动页面时间和显示用户协议问题
不建议阻断app,设置启动页面时间;iOS不建议显示用户协议弹窗。不要把安卓那一套机械的照搬到iOS的app上来原创 2022-12-29 15:30:58 · 334 阅读 · 0 评论 -
禁止手机侧滑返回上一个页面的三种方法
禁止手机侧滑返回上一个页面的三种方法终极方法:禁止平移手势,同时通过重置平移手势方法达到拦截侧滑功能原创 2021-07-26 15:16:30 · 6658 阅读 · 1 评论 -
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题?若你的页面不支持其它app唤醒你的app并传递参数的功能,直接在app启动函数清除粘贴板内容就可以:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [UIPasteboard generalPasteboard].string = @"";原创 2022-12-06 09:55:24 · 4076 阅读 · 0 评论 -
如何访问当前固定格式页面的所有控件并进行修改
如何访问当前固定格式页面的所有控件并进行修改。当然若是随着内容不断变化的页面,你可能找不到对应的控件,所以无法修改。另外有的第三方库会来回改控件的属性,你就是把它的属性修改了,第三方库也可能重新修改回去。我们经常用到第三方的SDK,只有头文件,拿不到源代码,那么就可以采用启动一个定时器扫描几次修改它的属性了(如控件的显示和隐藏,文本颜色)。下面给出了打印当前页面的所有控件及编号。首先可以通过基本类型和位置来确定你修改的控件,若实在找不到通过编号也能找到。只要找到控件和编号你想怎么修改还不是轻而易举的事情原创 2022-12-02 11:45:40 · 294 阅读 · 0 评论 -
如何获得keyWindow
由于iOS13及以后引入了SceneDelegate,导致不能通过原来的[UIApplication sharedApplication].keyWindow直接获取到正确的keyWindow。需要区分系统来获取。原创 2022-12-01 14:13:57 · 1153 阅读 · 0 评论 -
解决设置了标签的最大行数,更新标签的内容为富文本内容,导致超过最大行数不显示...问题
客户要求标签内容要有行距,那么只能通过富文本来设置行距了。这样就遇到了设置了标签的最大行数,更新标签的内容为富文本内容,导致超过最大行数不显示...问题。解决这个问题很简单,只需要加上一句`self.contentLb.lineBreakMode = NSLineBreakByTruncatingTail;`原创 2022-11-30 11:59:24 · 249 阅读 · 0 评论 -
A包含B,用block实现A和B互相调用更新数据
A包含B,用block实现A和B互相调用更新数据:在创建B时给它传递一个bock,对A特别关注的数据B更新该数据时同步给A。A创建B注册一个B的block,B需要时,调用block通知A更新最新的B关注数据给B或单例。然后再使用数据。原创 2022-11-30 11:42:33 · 418 阅读 · 0 评论 -
唤醒键盘后无法立即隐藏键盘问题与隐藏键盘的四种方式
唤醒键盘后无法立即隐藏键盘问题与键盘隐藏的四种方式:当判断是否显示键盘时,当发现没有登录时直接返回不显示键盘,并进行后续处理。1.注销第一响应者;2.结束编辑;3.keyWindow结束编辑;4.直接发送 resignFirstResponder 消息。原创 2022-11-30 09:34:27 · 587 阅读 · 0 评论 -
如何解决由引起的IQKeyboardManager部分页面返回的键盘高度比实际小或最后收到键盘隐藏通知却显示了键盘问题
如何解决由于IQKeyboardManager引起部分页面键盘高度不正确或最后收到键盘隐藏通知却显示了键盘问题:经过观察View UI Herarchy发现有键盘的页面都有UIInputSetContainerView,键盘的总高度就是UIInputSetHostView的总高度。只是iOS13及跟高的系统,键盘是在第二个窗口的UIInputWindowController中,而比iOS13低的版本在第是哪个窗口的UITextEffectsWindow中。原创 2022-11-29 14:38:06 · 1113 阅读 · 0 评论 -
UIView的animateWithDuration动画不执行问题
基本动画不执行:` [UIView animateWithDuration:animationDuration animations:^{ } completion:^(BOOL finished) { }];` 其实想解决很简单,就是调用布局重新绘制函数:[self layoutIfNeeded];原创 2022-11-29 11:50:32 · 1466 阅读 · 0 评论 -
如何关闭智能键盘IQKeyboardManager
如何关闭智能键盘IQKeyboardManager: [[IQKeyboardManager sharedManager] setEnable:NO]; [IQKeyboardManager sharedManager].enableAutoToolbar = NO;原创 2022-11-29 11:38:02 · 1751 阅读 · 0 评论 -
iOS13.6.1系统XR手机图文按钮显示不全问题
iOS13.6.1系统XR手机出来了奇怪的问题,图文按钮显示不全问题。比它老的系统或新的系统就是相同的手机都没有出现类似的问题。就是系统相同手机不同也没有出现该问题。既然测试提出该问题,只能修改了。这是特定手机特定系统适配问题。修改的思路是:把这个显示图片和文字的按钮拆分成按钮包含一个图片和一个标签,计算出他们的文字宽和图片宽。原创 2022-11-03 17:31:49 · 1056 阅读 · 0 评论 -
如何实现后台返回的数据有.00或.0,显示时若是整数不显示小数点和小数电以后的0,小数显示小数点
如何实现后台返回的数据有.00或.0,显示时若是整数不显示小数点和小数电以后的0,小数显示小数点解决方案,识别出这种整数,把它截去。原创 2022-11-02 17:30:54 · 757 阅读 · 0 评论 -
通过计算的文本宽度,由于小数四舍五入引起的文字显示不全问题
通过计算的文本宽度,由于小数四舍五入引起的文字显示不全问题:通过计算的文本宽度,若出现小数,而手机的屏幕有最低分辨率(BG_1PX (1.0f / [UIScreen mainScreen].scale)),标签的宽度只能大于文本实际的宽度才能正常显示,否则会出现显示不出来的问题。解决办法是:发现计算的文本宽度带小数(小数点后全是零不算)就直接把计算出的宽度加1像素。原创 2022-10-26 17:20:43 · 221 阅读 · 0 评论 -
表格高度根据内容自适应的瀑布流
方法一:直接计算表格的高度和修改表格的frame。这种方法的优点是实现简单,对普通表格的简单处理就能实现瀑布流。缺点:当左右两侧的表格高度总和差别很大,会出现一边表格没有,另一边的表格还有很多,造成左右不基本对称。除非你能保证左右两边的高度基本相当,才能解决这个硬伤。方法二:自定义一个基于UICollectionViewFlowLayout的子类实现部分方法,并且计算出每个表格的高度。原创 2022-10-26 14:37:33 · 743 阅读 · 0 评论 -
UICollectionViewCell和UITableViewCell上下左右留空白
UICollectionViewCell和UITableViewCell上下左右留空白:-(void)setFrame:(CGRect)frame{ frame.origin.x = COMMON_EDGE_DISTANCE; frame.size.width = FULL_WIDTH - COMMON_EDGE_DISTANCE*2; frame.origin.y+=10; frame.size.height-=20; [super setFrame:frame]原创 2022-07-19 11:25:33 · 440 阅读 · 0 评论 -
使用SDAutoLayout实现控件根据内容进行宽度自适应和高度自适应
第一种情况:控件根据内容进行宽度自适应:第二种情况:非表格控件根据内容进行高度自适应。第三种情况:表格控件根据内容进行高度自适应,不但要对控件进行自适应高度,还要对表格高度进行高度计算,对表格高度进行重新复制,并且采用表格复用的删除表格内容的方式复用。在UILabel自适应高度的同时,也可以对UILabel显示的最大行数进行限制...原创 2017-04-11 20:18:12 · 17539 阅读 · 0 评论 -
UITableView根据表格内容进行高度自适应与使用Masonry实现根据内容进行宽度自适应和高度自适应
Masonry的自适应宽度和高度大致可以分为三类情况。第一种情况:控件根据内容进行宽度自适应(就是省略左或右方向的一个约束);第二种情况:非表格控件根据内容进行高度自适应(就是省略上或下方向的一个约束);第三种情况:表格控件根据内容进行高度自适应,不但要对控件进行最大预计宽度设置(preferredMaxLayoutWidth),还要对表格高度进行自适应(不能有height约束),对表格高度设置为高度自适应的值(UITableViewAutomaticDimension)。.........原创 2022-07-19 09:13:18 · 4325 阅读 · 0 评论 -
自适应高度的表格UICollectionView
自适应高度的表格UICollectionView1.设置预估高度:flowLayout.estimatedItemSize = CGSizeMake((SCREEN_WIDTH-0*2), (50));//UICollectionViewFlowLayoutAutomaticSize;// 自适应 不设置预估高度表格显示不出来);2.不设置表格高度;3.表格设置为自适应高度。......原创 2022-07-18 17:38:16 · 1709 阅读 · 0 评论 -
短视频 TXUGCRecord工具如何全屏显示
我们遇到短视频 TXUGCRecord工具显示时部分带刘海的手机,视频捕捉区上下有黑色区域。解决方案:1.隐藏系统状态栏;2.设置视频渲染模式为VIDEO_RENDER_MODE_FULL_FILL_SCREEN。原创 2022-07-01 16:28:20 · 310 阅读 · 0 评论 -
表格中有WKWebView底部有空白问题及解决方案优缺点
表格中有WKWebView加载高度有空白问题理论上等网页加载完成,在didFinishNavigation修改表格高度,但是发现算出的高度比实际高出现底部空白。解决方案:kvo监控self.webView.scrollView的contentSize,延迟修正表格高度,只修正一次,防止循环刷页面。这样也存在不友好的问题,页面刷新两边产生闪烁,当有大图片或多个视频或图片时显示不完全。所以显示纯文本类的h5很有效,含单张不大的图片或含单个视频也可以。原创 2022-04-07 18:39:42 · 1103 阅读 · 0 评论 -
非标准h5字符串的WKWebView展示前的解析与插入属性或标题头与解决WKWebView无法加载视频首帧问题
WKWebView加载h5中有视频链接,无法加载视频首帧,看到一片空白和一个播放按钮。那如何让它加载首帧图片呢?很简单在视频链接前加上`controls=\"controls\" autoplay=\"autoplay\"`。因为是含有非标准h5字符串,可能只返回一个字符串,由于没有设置字体WKWebView直接显示默认字体可能很小,完全达不到ui图的效果,只能增加头设置字体来搞定了。原创 2022-04-07 16:57:54 · 1703 阅读 · 0 评论 -
UITextView的attributedText含有NSTextAttachment对象、表情包和普通文本的遍历与组装h5字符串
UITextView的attributedText含有NSTextAttachment对象、表情包和普通文本的可以遍历。注意:表情包和普通文本被遍历时相似单又被分开。表情包的插入与移动光标。使用enumerateAttributesInRange遍历。原创 2022-04-07 16:26:24 · 606 阅读 · 0 评论 -
UITextView实现图片、视频和表情与插入删除和删除。
表情是特殊的串。通过UITextView插入NSTextAttachment来显示图片。很不幸NSTextAttachment只能展示图片,不能展示视频。可以通过类继承来实现把视频链接存入它的子类,展示只能按照视频的首帧图展示。视频的和图片的上产可以通过第三方组件LFImagePickerController选择视频和图片,视频可以可以拿到视频的首帧图和NSData类型的视频数据。把视频或图像上传服务器,服务器返回它的地址。最后解析attributedText组装h5格式字符串发送给服务器。原创 2022-04-07 16:03:29 · 1412 阅读 · 0 评论 -
如何实现按钮的图片在右边,文字在左边
按钮设置了文字和图片,若宽度足够展开的话,默认都是图片在作,文字在右。想文字在左,图片在右右两种方法。第一种方法很简单。通过设置setSemanticContentAttribute属性来实现。```[_bgBtn2 setSemanticContentAttribute:UISemanticContentAttributeForceRightToLeft];```第二种方法是通过设置titleEdgeInsets和setImageEdgeInsets来实现。原创 2022-03-11 15:29:27 · 3745 阅读 · 0 评论 -
UITextField shouldChangeCharactersInRange获取实时数据并执行联想搜索和搜索
NSString *str = [NSString stringWithFormat:@"%@%@%@", getNotNilString([textField.text substringToIndex:range.location]), string, getNotNilString([textField.text substringFromIndex:range.location])];原创 2022-03-03 09:39:35 · 970 阅读 · 0 评论 -
ios15从隐藏系统导航栏页面进入显示系统导航栏页面后,期望系统导航栏背景色为白色,但是导航栏背景变成黑色问题
ios15从隐藏系统导航栏页面进入显示系统导航栏页面后,期望系统导航栏背景色为白色,但是导航栏背景变成黑色问题。经过多次分析是因为底层大背景被设置了默认颜色引起,把它设置成对应白色就可以了:```self.navigationController.view.backgroundColor = [UIColor whiteColor];//设置系统导航栏及大背景颜色。```原创 2022-02-21 10:08:42 · 4038 阅读 · 0 评论 -
设置标签的attributedText和设置输入框的attributedPlaceholder
设置标签的attributedText NSString *str = @"修改后会影响物流时效、送货上门等服务,只能原价修改且付款后只能修改一次。若因商品换仓、已发货、运费变更等原因导致修改失败,请您谅解。"; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:str]; [attributedString addA原创 2022-02-11 17:08:54 · 685 阅读 · 0 评论 -
根据字符串内容、最大宽度和字体计算行宽和高度
根据字符串内容、最大宽度和字体计算行数和高度计算宽度 CGSize maxSize = CGSizeMake(MAXFLOAT,45); //设置字符串的宽高 MAXFLOAT为最大宽度极限值 45为最大高度。若设置为最大宽度是MAXFLOAT则只能计算宽度;当然若设置为有限的值,如:300,则可以计算高度。 CGSize size = [@"微信授权登录" boundingRectWithSize:maxSize options:NSStringDrawingUsesLine原创 2022-02-10 10:30:06 · 1459 阅读 · 0 评论 -
iOS UITableViewCell刷新某些行的cell或section
//一个section刷新NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:2];[tableview reloadSections:indexSet withRowAnimation:UITableViewRowAnimationAutomatic];//一个或多个cell刷新NSIndexPath *indexPath1=[NSIndexPath indexPathForRow:2 inSection:0];NSIndexPath *i原创 2022-01-18 15:19:55 · 1209 阅读 · 0 评论