资讯专栏INFORMATION COLUMN

iOS开发中遇到的那些坑,持续更新

Yuqi / 2721人阅读

摘要:开发中遇到的那些坑持续更新按钮布局,上下排版在使用中,用一个图文上下排版形式的按钮,机会还是蛮多的。删除多余的分割线在开发中,有时候会遇到数据源的数量并不能铺满整个屏幕,在下方留下一大段的分割线空白。

iOS开发中遇到的那些坑,持续更新 按钮布局,上下排版

在使用中,用一个图文上下排版形式的按钮,机会还是蛮多的。这种情况,大多数都是直接修改 按钮的 imageEdgeInsetstitleEdgeInsets。eg:

 Btn.titleEdgeInsets = UIEdgeInsetsMake(Btn.imageView.frame.size.height ,-Btn.imageView.frame.size.width, 0.0,0.0);
 Btn.imageEdgeInsets = UIEdgeInsetsMake(0.0, 0.0,0.0, -Btn.titleLabel.bounds.size.width);

类似这种的一种形式,可以让按钮的布局变成一个 上下图文 的布局形式。当然,使用 imageEdgeInsetstitleEdgeInsets 也可以修改 按钮上 图文的 间距,不至于那么紧凑,表现上更加好看。

UITableView

删除多余的分割线
在开发中,有时候会遇到 数据源 的数量并不能铺满整个屏幕,在 tableView 下方留下一大段的分割线空白cell。那么这时候,只需要 设置 tableViewfooterView。eg:

 xxTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]

或者是在 实现 UITableViewDelegate 中的一个代理方法。

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

返回值,设置为一个很小的数值,如果设置为0的话,那么是不失效的。因此在使用上,我更偏向于直接第一种方法。

分割线顶头
总觉得 UITableView 默认的分割线会自动留空一定的间距,估计对于处女座会是一万点的伤害。上网查过资料,说iOS6之前的话,是默认顶格的。(摔。iOS6的年代我还苦逼刷着一代神机defy。(逃。后来在某些资料上看到,只需要重新设置其 layoutMargins 或者 separatorInset。由于 layoutMargins 是 iOS8 以后才有的,因此在 实现过程中,需要对 系统版本进行一个判断,iOS8 之后的版本使用前者,iOS7 的话,则使用后者。eg:

[cell setLayoutMargins:UIEdgeInsetsZero];         // iOS8+
[cell setSeparatorInset:UIEdgeInsetsZero];        // iOS7

我是在 UITableViewDataSource 的一个代理方法中进行实现的。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

UITabBar

修改UITabBar的背景颜色时,并不能通过修改 backgroundColor属性来修改,这样修改的结果并不会起到任何效果。有两种方法可以进行修改:

通过修改 tintColor属性,但是UITabBar默认有一个透明作用的属性——translucent。该值默认为YES。如果没有将其设置为NO的话,那么显示出来的tabBar会有一种蒙板之类的效果。还是直接上代码吧

self.tabBar.barTintColor = [UIColor redColor];
self.tabBar.translucent = NO;

将一个 view插进 tabBar的第一位,即——

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, _tabBar.bounds.size.height)];
view.backgroundColor = [UIColor redColor];
[_tabBar insertSubview:view atIndex:0];

修改选中的tabBarItem的背景,那么就要修改其selectionIndicatorImage。但是,之前使用的时候,发现点击之后,图片并不能拉伸。在每个item的左右两边都会留下一小段未覆盖的部分。

 _tabBar.selectionIndicatorImage = [UIImage imageNamed:@"xx"];

设置selectedItemselectedImage时,需要修改图片的renderingMode,不然显示出来还是 默认的蓝色。即——

UIImage *selectedImage = [UIImage imageNamed:@"xx"];
selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
_tabBar.selectionIndicatorImage = selectedImage;

设置selectedItem选中时的字体颜色,可以通过修改initialize方法里面进行更改,即——

+(void)initialize {
    UITabBarItem *item = [UITabBarItem appearanceWhenContainedIn:self, nil];
    NSMutableDictionary *colorDic = [NSMutableDictionary dictionary];
    colorDic[NSForegroundColorAttributeName] = [UIColor redColor];
    [item setTitleTextAttributes:colorDic forState:UIControlStateSelected];
}

也可以直接修改 UITabBarItemappearance,即——

[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName ] forState:UIControlStateSelected];

诸如这样的形式。也可以用其修改字体等。

iOS7+自带右划返回手势

iOS7之后,加入了一个 右划返回 的手势事件。但是这个的前提是,使用iOS原生的NavigationBar。如果是自定义NavigationBar之类的话,那么这个 右划返回上一页 的功能就会失效。这时候,只要使用以下两句代码,便可以继续使用这功能了。

self.navigationController.interactivePopGestureRecognizer.enabled = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
获取所属UIViewController

有时候,在一个 UIView 的类下,要进行一些操作,比如自定义的某个方法,需要传入一个UIViewController的值,那么这时候该如何进行传值。可以用以下代码找到所属的UIViewController

-(UIViewController*)viewController {
    for (UIView* next = [self superview]; next; next = next.superview) {
        UIResponder* nextResponder = [next nextResponder];
        if ([nextResponder isKindOfClass:[UIViewController class]]) {
            return (UIViewController*)nextResponder;
        }
    }
    return nil;
} 
UIScrollView

有时候,在使用UIScrollView的过程中,会发现里面所有的控件都下移了20。那么这时,在对应的controller中,加上

self.automaticallyAdjustsScrollViewInsets = NO

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/16035.html

相关文章

  • Android开发那些事 - 收藏集 - 掘金

    摘要:系统中,那些能大幅提高工作效率的汇总持续更新中掘金前言条条大路通罗马。在执行某个动作时需要判断当前用户是否登录,如果没有登录则跳转至登录页快速开发工具类集合掘金应用工具类 利用 Chrome 开发者工具远程调试 Android 中的原生 WebView - 掘金之前写过一篇关于 Android Studio 断点调试技巧 的文章,但都是针对 Native 代码的调试,对于 Hybrid...

    Faremax 评论0 收藏0
  • 微信网页开发调用微信jssdk接口遇到以及最终解决方法 (持续更新

    摘要:在系统的手机中,其实微信点击网页的图片会自动调用这个接口一次。然后在在下面进行微信的接口的调用判断是还是终端终端更新这个好像微信自己修复了,现在无论还是,如果不调用这个方法,微信自己不会去调用了。 1.微信网页开发调用jssdk时报permission denied 大致是两个原因 (1)首先注册时未将你所调用的接口名字添加至jsApiList (2)第二个就是你的这个公众号没有权限使...

    JowayYoung 评论0 收藏0
  • 微信网页开发调用微信jssdk接口遇到以及最终解决方法 (持续更新

    摘要:在系统的手机中,其实微信点击网页的图片会自动调用这个接口一次。然后在在下面进行微信的接口的调用判断是还是终端终端更新这个好像微信自己修复了,现在无论还是,如果不调用这个方法,微信自己不会去调用了。 1.微信网页开发调用jssdk时报permission denied 大致是两个原因 (1)首先注册时未将你所调用的接口名字添加至jsApiList (2)第二个就是你的这个公众号没有权限使...

    Little_XM 评论0 收藏0
  • Python那些

    摘要:在此开一个专题,用来记录在使用过程中遇到的一些问题,以及解决方法,生命不息,踩坑不止。解决方法重新下载安装速度慢解决办法使用国内镜像源镜像每分钟同步一次。 在此开一个专题,用来记录在使用Python过程中遇到的一些问题,以及解决方法,生命不息,踩坑不止。持续更新……文章目录​​pip问题​​​​pip install 速度...

    不知名网友 评论0 收藏0
  • android开发案例

    摘要:多个可以提高你安卓开发技能的开源学习的最佳方式就是阅读,对程序员来说也是如此。年初你绝对想尝试的个新安卓库这是一份年,月份发布的个最佳安卓库的列表,你应该会喜欢,虽然是按顺序排列的,但排名不分先后。 20 多个可以提高你安卓开发技能的开源 app 学习的最佳方式就是阅读,对程序员来说也是如此。如果你想成为一个更优秀的程序员,你必须阅读更多的代码,就是这么简单。书籍,博客,论坛在某种程度...

    LeexMuller 评论0 收藏0

发表评论

0条评论

Yuqi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<