记录一些小技术点,方便使用时查找。
更改UITabBar && UINavigationBar背景颜色
1 | [[UITabBar appearance] setBarTintColor:[UIColor redColor]]; |
更改UITabBar && UINavigationBar字体颜色
1 | //改变按钮navigationBar tintColor颜色 |
设置UIViewController的view的top在navigationBar下面 & bottom位置在Tabbar的上面
1 | tabBarController.tabBar.translucent = NO; |
改变UISlider的进度条高度
需要继承UISlider并t重载trackRectForBounds方法1
2
3
4- (CGRect)trackRectForBounds:(CGRect)bounds
{
return CGRectMake(0, 0, CGRectGetWidth(self.frame), 5.0);
}
UIPageViewController 翻页效果
UIPageViewController的默认翻页效果类似于翻书的效果,如果想要平铺翻页和指定翻页方向呢?我们发现有navigationOrientation和transitionStyle两个属性,但是这两个属性是只读的,查看.h文件可知UIPageViewController提供了init方法1
- (instancetype)initWithTransitionStyle:(UIPageViewControllerTransitionStyle)style navigationOrientation:(UIPageViewControllerNavigationOrientation)navigationOrientation options:(nullable NSDictionary<NSString *, id> *)options NS_DESIGNATED_INITIALIZER;
所以需要改变默认的翻页效果和方向可以通过init方法实现;1
2
3
4NSDictionary *options = @{UIPageViewControllerOptionInterPageSpacingKey : @(0)};
_pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:options];
push新页面时隐藏tabbar
1 | UIViewController *viewController = [[UIViewController alloc] init]; |
Xcode Build Settings Reference , pods配置时使用的key对照表
https://pewpewthespells.com/blog/buildsettings.html
正则匹配
1 | - (BOOL)telePhoneMatchRules { //11位数字 |
更多正则参考:http://www.cnblogs.com/zxin/archive/2013/01/26/2877765.html
push到下级页面之前,无感知的移除某几个上级页面
1 | [self.navigationController pushViewController:nextVC animated:YES]; |
自定义UITableViewCell多选模式下选中和未选中的图片
在cell中实现1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19- (void)layoutSubviews {
[super layoutSubviews];
for (UIControl *control in self.subviews) {
if ([control isMemberOfClass:NSClassFromString(@"UITableViewCellEditControl")]) {
for(UIView *view in control.subviews) {
//找到选中时的image
if ([view isKindOfClass:[UIImageView class]]) {
UIImageView *imageView = (UIImageView *)view;
imageView.contentMode = UIViewContentModeScaleToFill;
if(self.selected) {
imageView.image = [UIImage imageNamed:@"ac_selectedImage"];
}else {
imageView.image = [UIImage imageNamed:@"ac_disSelectedImage"];
}
}
}
}
}
}
判断今天、明天、后天
1 | NSTimeInterval sencondDay = 24 * 60 * 60; |
隐藏导航条和显示导航条的页面间返回手势平滑切换
1 | - (void)viewWillAppear:(BOOL)animated |
或者是使用开源库:FDFullscreenPopGesture
改变UITableViewCell复选框默认图
1 | - (void)layoutSubviews { |
但是会偶现某些cell还是出现默认复选框的情况,应该是重用时没有触发layoutSubviews导致,所以并不是很好
设备信息,app信息
1 | NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; |
手机震动一下
1 | #import <AudioToolbox/AudioToolbox.h> |
顶部导航条电量信息变色
重写preferredStatusBarStyle方法,比如变成白色1
2
3- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
设置TextField属性之文字距左边框的距离
textfield有个属性leftview,设置一个只有宽度的leftView.然后需要将leftViewMode设置为UITextFieldViewModeAlways.因为默认textfield.leftView是不显示的.
iOS中调整view层级位置的两个属性
控件的层级关系和你加入到父视图的顺序有关,也就是先addsubview至父视图的,层级越低,会被后加入的遮盖。
可以通过以下函数改变子视图的层级
将一个UIView显示在调用者view最前面:1
- (void)bringSubviewToFront:(UIView *)view;
将视图显示在下面:1
- (void)sendSubviewToBack:(UIView *)view;
改变状态栏背景色导致返回手势过程(从有导航条->隐藏导航条)中,导航条突然消失问题
1 | //重写 UINavigationController 得方法 |
打包突然出现errSecInternalComponent Command /usr/bin/codesign failed with exit code 1错误
Xcode bug,可能是过期证书过多,清理过期证书,或者重启mac!!!
UIPickerView 中间黑线消失的问题
问题描述:使用UIPickerView过程中发现在某种情况下pickview的两条默认的黑线消失了!!!
测试发现在viewDidLoad中add到view上的pickview的线又会显示!!!
查找问题:查找发现黑色线的设置是通过-[UIPickerView _setMagnifierLineColor:]方法设置的,不显示黑线是因为在-[UIPickerView _setMagnifierLineColor:]这个方法调用得时候pickview的subviews为nil,自然给线的view设置颜色无效。但是为什么在viewDidLoad中add到view上的pickview的线会显示呢?断点发现在这种情况下-[UIPickerView _setMagnifierLineColor:]会被调用两次,第一次调用时pickview的subviews依然为nil,第二次subviews中则包含了两根线的view。
猜想:苹果的bug,设置颜色的方法不应该在subviews还没准备好的时候去调用。
暂时的解决办法:在pickview被添加到父view的时候调用layoutSubviews方法,让其subviews先绘制出来;