iOS开发中的一些实用小技巧


以下小技巧都是本人在开发中得出的小经验,如有错误欢迎指教,有更好的技巧欢迎留言交流,以下如有雷同,纯属巧合,谢谢!


1.给新建工程中的storyboard添加navigationbar

nav.png

2.在Nib中选中UIImageView之后,勾选Clip Subviews将会裁剪掉超出UIImageView的范围外的内容

裁剪.png

3.开发中的编码与解码

  • 1>上传汉字到服务器,服务器那边要是没有做编码的话,汉字是乱码,此时需要由程序员转码成UTF-8,用到的方法是:
NSString * encodingString = [@"你需要上传转码的字符串" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  • 2>通过接口请求后,返回的数据,格式显示如为:%3A%2F%2F样式,此时需要我们进行UTF-8解码,用到的方法是:
NSString *nameString = [model.album_name(你从服务器请求下来的数据,如名字) stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

4.弧度与角度互转(宏)

// 弧度转角度
#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI))

// 角度转弧度
#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)

4.判断控件是否在某个试图上

if ([_label isDescendantOfView: self.testView]) {
    NSLog(@"在视图上");
}

5.设置图片不被拉伸

设置.png

6.设置图片拉伸方式

设置1.png
设置2.png

7.Nib中设置Aspect Fit之后设置高度,图片会动设置宽高比

(如:图片原本size为 100 x 45,但你使用的时候感觉宽度太窄想要200,此时就可进行设置,当设置宽度为200时,高度自动跟随宽度设置)


设置宽高比.png

8.通知系统,马上更新布局([self.view layoutIfNeeded])

布局.png

9.文件夹改为.bundle包

.bundle包.png

10.在桌面创建一个.plist文件,方便查看请求数据(在AF请求成功的Block中写)

// responseObject为AF请求下来的数据   参数一:你随便从你电脑桌面上拉取一个东西放此处就能得到路径,然后起个你喜欢的名字后缀为.plist
[responseObject writeToFile:@"/Users/xxxxxxx/Desktop/xxxx.plist" atomically:YES];

11.ARC工程更改为MRC

目前都是自动内存管理,但想深入了解引用计数器的+1 、 -1 、释放回收的机制,可以一试


11.png

12.使用cocoapods中...Podfile like so报错

报错.png

13.debug模式的运用

  • 定义debug宏(测试):
#ifdef DEBUG
# define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
# define DLog(...)
#endif
  • 关闭debug宏(发布):


    快照.png

    快照2.png

14.iOS launch启动界面全屏

1.在<APP>-info.list文件中,加上“Status bar is initially hidden”选项,选择yes

2在程序里面添加 [[UIApplication sharedApplication]setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
即可

15.layout、drawRect的调用

[self setNeedsLayout] 会在恰当的时候调用 layoutSubviews 方法
[self setNeedsDisplay] 会在恰当的时候调用 drawRect 方法

16.Nib按钮设置内容偏移

Edge 选择你要移动的内容,可以是文字、图片、或者是整体


偏移.png

17.Nib中按钮设置圆角

圆角.png

18.Xib中label如何换行?

在nib或者SB中,一个labe要求显示多行的时候,在换行的地方使用 option + enter 即可实现换行

19.自动缩放到图片原本尺寸大小:command 加 =

使用之前


使用之前.png

使用之后


使用之后.png

20.swift3.0延迟执行代码

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3.0) {
        print(要执行的代码)
}

21.贝塞尔曲线角度参考图


22.自定义代码片段

@property (nonatomic, retain) <#type#> *<#name#>
※号代表一个空格
代码片段的路径

23.CAShapeLayer属性图

24.Button防止短时间内重复点击

25.计算最大行数

// 总行数 = (总个数 + 每行的最大数 - 1) / 每行最大数
NSUInteger rows = (dataArr.count + maxCols - 1) / maxCols;

26.修改项目名及脚本替换类名

https://blog.csdn.net/qq_23292307/article/details/80915654

27.修改SearchBar占位文字颜色及大小

    UISearchBar *serchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(58, 10, SCREEN_W-58*2, 30)];
    serchBar.placeholder = @"输入症状、疾病、医生、科室、医院";
    // 修改占位文字
    UITextField * searchField = [serchBar valueForKey:@"_searchField"];
    [searchField setValue:Font_Shallow_999999 forKeyPath:@"_placeholderLabel.textColor"];
    [searchField setValue:[UIFont boldSystemFontOfSize:11] forKeyPath:@"_placeholderLabel.font"];
    serchBar.barTintColor = [UIColor whiteColor];
    serchBar.layer.borderColor = Line_e0e0e0.CGColor;
    serchBar.layer.borderWidth = 1;
    serchBar.layer.masksToBounds = YES;
    serchBar.layer.cornerRadius = 15;
    [upView addSubview:serchBar];

###兼容iOS13(iOS13使用kvc获取会奔溃)
    UISearchBar *serchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(58, 10, SCREEN_W-58*2, 30)];
    serchBar.placeholder = @"输入症状、疾病、医生、科室、医院";
    serchBar.barTintColor = [UIColor whiteColor];
    serchBar.layer.borderColor = Line_e0e0e0.CGColor;
    serchBar.layer.borderWidth = 1;
    serchBar.layer.masksToBounds = YES;
    serchBar.layer.cornerRadius = 15;
    [self addSubview:serchBar];
    
    UITextField * searchField = nil;
    if (@available(iOS 13.0, *)) {
        searchField = serchBar.searchTextField;
    }else {
        searchField = [serchBar valueForKey:@"_searchField"];
    }
    NSMutableAttributedString *arrStr = [[NSMutableAttributedString alloc] initWithString:searchField.placeholder attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:13],NSForegroundColorAttributeName:Font_Shallow_999999}];
    searchField.attributedPlaceholder = arrStr;

28.从数组中删除,防止重复添加

// 从父类中抹掉之前创建标签,防止重复添加
[self.labelArr makeObjectsPerformSelector:@selector(removeFromSuperview)];
[self.labelArr removeAllObjects];

29.返回到指定页面

for (UIViewController *controller in self.navigationController.viewControllers) {
    if ([controller isKindOfClass:[ChatViewController class]]) {
         [self.navigationController popToViewController:controller animated:YES];
       }
 }

30.A(带Nav) present B(B不需要Nav), B push C(需要Nav) A->B ->C

1、在A中Push B时用Nav包装B,present时使用nav

let nav = NavgationViewController.init(rootViewController: B_ViewController())
            self.present(nav, animated: true, completion: nil)

2、在B中设置加载隐藏Nav,结束显示Nav

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.setNavigationBarHidden(true, animated: true)
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        navigationController?.setNavigationBarHidden(false, animated: true)
    }

3、B正常push C即可

let vc = C_ViewController()
self?.navigationController?.pushViewController(vc, animated: true)

注:如B可push到C,但C中不显示Nav,设置C显示时不隐藏Nav

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.setNavigationBarHidden(true, animated: false)
    }

最后附带一些常用的快捷键

名称 快捷键 注:0 为数字/ O为字母
显示/隐藏 左侧 工具面板 Command + 0
显示/隐藏 右侧 工具面板 Command + Option + 0
Nib或者SB中快速打开关联类 Command + Option + enter
方法查找 Control + 6
快速打开查找 Command + Shift + O
文档和参考 Command + Shift + 0
收起/展开方法实现 Command + Option + ⬅️ / ➡️
返回/前进上次打开的界面 Command + Control + ⬅️ / ➡️
打开 Command + O
关闭窗口 Command + W
上/下移动代码 Command + Option + [ / ]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容