分享一些iOS开发实用的小技巧
程序员文章站
2023-12-20 09:05:40
1.设置navigationbar title颜色
uicolor *whitecolor = [uicolor whitecolor];
nsdiction...
1.设置navigationbar title颜色
uicolor *whitecolor = [uicolor whitecolor]; nsdictionary *dic = [nsdictionary dictionarywithobject:whitecolor forkey:nsforegroundcolorattributename]; [self.navigationcontroller.navigationbar settitletextattributes:dic];
2.获取uicolor rgb
uicolor *color = [uicolor colorwithred:0.0 green:0.0 blue:1.0 alpha:1.0]; const cgfloat *components = cgcolorgetcomponents(color.cgcolor); nslog(@"red: %f", components[0]); nslog(@"green: %f", components[1]); nslog(@"blue: %f", components[2]); nslog(@"alpha: %f", components[3]);
3.修改textfield的placeholder的字体颜色、大小
[self.textfield setvalue:[uicolor redcolor] forkeypath:@"_placeholderlabel.textcolor"]; [self.textfield setvalue:[uifont boldsystemfontofsize:16] forkeypath:@"_placeholderlabel.font"];
4.将color转为uiimage
- (uiimage *)createimagewithcolor:(uicolor *)color { cgrect rect = cgrectmake(0.0f, 0.0f, 1.0f, 1.0f); uigraphicsbeginimagecontext(rect.size); cgcontextref context = uigraphicsgetcurrentcontext(); cgcontextsetfillcolorwithcolor(context, [color cgcolor]); cgcontextfillrect(context, rect); uiimage *theimage = uigraphicsgetimagefromcurrentimagecontext(); uigraphicsendimagecontext(); return theimage; }
5.加载启动图的时候隐藏statusbar
在info.plist中加入status bar is initially hidden 设置为yes
6.获取按钮title的size
/** * 获取按钮title的size */ - (cgfloat)getbtntitlewidth:(uibutton*)btn { cgsize titlesize = [btn.titlelabel.text sizewithattributes:@{nsfontattributename:btn.titlelabel.font}]; return titlesize; }
7.设置status bar颜色
uiview *view = [[uiview alloc] initwithframe:cgrectmake(0, -20, screenwidth, 20)];[view setbackgroundcolor:color_app_main]; [viewcontroller.navigationcontroller.navigationbar addsubview:view];
8.json转dictionary,dictionary转json
+ (nsstring*)dictionarytojson:(nsdictionary *)dic { nserror *parseerror = nil; nsdata *jsondata = [nsjsonserialization datawithjsonobject:dic options:nsjsonwritingprettyprinted error:&parseerror]; return [[nsstring alloc] initwithdata:jsondata encoding:nsutf8stringencoding]; }
+(nsdictionary *)jsontodic:(nsstring*)jsonstr { nsdata *jsondata = [jsonstr datausingencoding:nsutf8stringencoding]; nserror *err; nsdictionary *dic = [nsjsonserialization jsonobjectwithdata:jsondata options:nsjsonreadingmutablecontainers error:&err]; return dic; }
9.是否允许推送
+(bool)isallowednotification{ if ([[uidevice currentdevice].systemversion floatvalue] >= 8.0) { uiusernotificationsettings *setting = [[uiapplication sharedapplication] currentusernotificationsettings]; if(uiusernotificationtypenone != setting.types) { return yes; } } nslog(@"不允许推送"); return no; }
10.磁盘空间相关
+ (nsstring *)memoryformatter:(long long)diskspace { nsstring *formatted; double bytes = 1.0 * diskspace; double megabytes = bytes / mb; double gigabytes = bytes / gb; if (gigabytes >= 1.0) formatted = [nsstring stringwithformat:@"%.2f gb", gigabytes]; else if (megabytes >= 1.0) formatted = [nsstring stringwithformat:@"%.2f mb", megabytes]; else formatted = [nsstring stringwithformat:@"%.2f bytes", bytes]; nslog(@"fotmatted=%@",formatted); return formatted; } + (nsstring *)totaldiskspace { long long space = [[[[nsfilemanager defaultmanager] attributesoffilesystemforpath:nshomedirectory() error:nil] objectforkey:nsfilesystemsize] longlongvalue]; return [self memoryformatter:space]; } + (nsstring *)freediskspace { long long freespace = [[[[nsfilemanager defaultmanager] attributesoffilesystemforpath:nshomedirectory() error:nil] objectforkey:nsfilesystemfreesize] longlongvalue]; return [self memoryformatter:freespace]; }
11.修改了leftbarbuttonitem如何恢复系统侧滑返回功能
//设置代理 self.interactivepopgesturerecognizer.delegate = self; #pragma mark - <uigesturerecognizerdelegate> //实现代理方法:return yes :手势有效, no :手势无效 - (bool)gesturerecognizershouldbegin:(uigesturerecognizer *)gesturerecognizer { //当导航控制器的子控制器个数 大于1 手势才有效 return self.childviewcontrollers.count > 1; }
或者用第三方 uinavigationcontroller+fdfullscreenpopgesture
12.使用uiappearance在某个状态下设置颜色,字体等不好使
只需要在对应的位置用layoutifneeded
刷新一下就可以了
13.设置圆形图片
/** 设置圆形图片(放到分类中使用) */ - (uiimage *)cutcircleimage { uigraphicsbeginimagecontextwithoptions(self.size, no, 0.0); // 获取上下文 cgcontextref ctr = uigraphicsgetcurrentcontext(); // 设置圆形 cgrect rect = cgrectmake(0, 0, self.size.width, self.size.height); cgcontextaddellipseinrect(ctr, rect); // 裁剪 cgcontextclip(ctr); // 将图片画上去 [self drawinrect:rect]; uiimage *image = uigraphicsgetimagefromcurrentimagecontext(); uigraphicsendimagecontext(); return image; }
14.如果在xib中有一个控件, 已经明确设置尺寸了,输出的frame也是对的, 但是显示出来的效果不一样(比如尺寸变大了), 如果是这种情况一般就是autoresizingmask自动伸缩属性在搞鬼!
解决办法如下:
//xib的awakefromnib方法中设置uiviewautoresizingnone进行清空 - (void)awakefromnib { self.autoresizingmask = uiviewautoresizingnone; }
15.通过图片data数据第一个字节 来获取图片扩展名
- (nsstring *)contenttypeforimagedata:(nsdata *)data { uint8_t c; [data getbytes:&c length:1]; switch (c) { case 0xff: return @"jpeg"; case 0x89: return @"png"; case 0x47: return @"gif"; case 0x49: case 0x4d: return @"tiff"; case 0x52: if ([data length] < 12) { return nil; } nsstring *teststring = [[nsstring alloc] initwithdata:[data subdatawithrange:nsmakerange(0, 12)] encoding:nsasciistringencoding]; if ([teststring hasprefix:@"riff"] && [teststring hassuffix:@"webp"]) { return @"webp"; } return nil; } return nil; }
16.用0补全的方法
nsinteger count = 5; //02代表:如果count不足2位 用0在最前面补全(2代表总输出的个数) nsstring *string = [nsstring stringwithformat:@"%02zd",count]; //输出结果是: 05 nslog(@"%@", string);
总结
以上就是这篇文章的全部内容,希望本文中的这些小技巧能给大家开发ios的时候提供一定的帮助,如果有疑问大家可以留言交流。