美文网首页代码片段iOS积累用之程序员
开发中遇到的坑和部分心得1

开发中遇到的坑和部分心得1

作者: moxuyou | 来源:发表于2016-10-27 15:53 被阅读369次
    1.分享的时候如何监听应用是否已经安装
    #import <TencentOpenAPI/QQApiInterface.h>
    #import "WXApi.h"
    //判断QQ是否安装
    if (![QQApiInterface isQQInstalled]) {
            self.QQBgView.hidden = YES;
        }
    //判断微信是否安装
        if (![WXApi isWXAppInstalled]) {
            self.webChatBgView.hidden = YES;
            self.webChatFriendBgView.hidden = YES;
        }
    //判断微博是否安装
    //    BOOL hasSinaWeibo = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"com.weibo://wb你的APPID"]];
    //    if (hasSinaWeibo == NO) {
    //        self.sinaBgView.hidden = YES;
    //    }
    
    
    2."error":"userinfo error","pos":"5"

    iOS开发中使用到了新浪微博的分享功能,若是没有安装微博客户端,则使用网页登陆授权,进行分享。最近之前自己集成的分享功能不能正常分享了,使用网页登陆后就出现{"error":"userinfo error","pos":"5"}这个错误信息
    在进行新浪微博分享的时候,最早在新浪微博开放中平台创建应用后,没有添加测试账号的前提下也能进行网页模式下分享内容到微博。
    现在的这个问题是1.应用未通过新浪的审核 2. 应用没有添加相应的测试账号
    若是应用过审了,则任意微博账号都可以无阻的进行分享,但处于开发阶段,这个过审就是不可及的,所以最保险的方法就是添加测试账号。

    3.第三方分享,自定义分享界面
    
    #pragma mark -第三方分享
    //QQ分享按钮被点击
    - (void)QQBgViewClick{
        //    NSLog(@"%s", __func__);
        NSURL *url = self.webView.URL;
        NSString *urlStr = url.absoluteString;
        //    [self.webView ];
        NSString *shareStr = [NSString stringWithFormat:@"%@   %@", self.webViewInnerText, url];
        UIImage *logo = [UIImage imageNamed:@"Icon"];
        [UMSocialData defaultData].extConfig.qqData.url = urlStr;
    
        [UMSocialData defaultData].extConfig.qqData.title = self.webViewInnerTitle;
        //    [UMSocialData defaultData].extConfig.qqData.url = shareStr;
        [[UMSocialDataService defaultDataService] postSNSWithTypes:@[UMShareToQQ] content:shareStr image:logo location:nil urlResource:[UMSocialData defaultData].urlResource presentedController:self completion:^(UMSocialResponseEntity *response) {
            
            if (response.responseCode == UMSResponseCodeSuccess) {
                NSLog(@"分享成功!");
    //            [GMUtils showTipsWithHUD:@"分享成功!" showTime:0.5];
            }
        }];
    }
    
    //新浪分享按钮被点击
    - (void)SinaBgViewClick{
        //    NSLog(@"%s", __func__);
        //微博 分享
        NSString *titleStr = self.webViewInnerTitle;// object.suiCiNian;
        NSURL *url = self.webView.URL;
        //    NSString *urlStr = url.absoluteString;
        NSString *shareStr = [NSString stringWithFormat:@"《%@》  %@", titleStr, url];
        UIImage *logo = [UIImage imageNamed:@"Icon"];
        [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToSina] content:shareStr image:logo location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
            
            if (response.responseCode == UMSResponseCodeSuccess) {
                NSLog(@"分享成功!");
    //            [GMUtils showTipsWithHUD:@"分享成功!" showTime:0.5];
            }
            
        }];
    }
    
    //微信朋友圈分享按钮被点击
    - (void)WebChatFriendBgViewClick{
        
        //    NSLog(@"%s", __func__);
        NSString *titleStr = self.webViewInnerTitle;// object.suiCiNian;
        NSURL *url = self.webView.URL;
        NSString *urlStr = url.absoluteString;
        
        NSString *shareStr = [NSString stringWithFormat:@"《%@》  %@", titleStr, url];
        UIImage *logo = [UIImage imageNamed:@"Icon"];
        [UMSocialData defaultData].extConfig.wechatTimelineData.url = urlStr;
        [UMSocialData defaultData].extConfig.wechatTimelineData.title = titleStr;
        [[UMSocialDataService defaultDataService] postSNSWithTypes:@[UMShareToWechatTimeline] content:shareStr image:logo location:nil urlResource:[UMSocialData defaultData].urlResource presentedController:self completion:^(UMSocialResponseEntity *response) {
            
            if (response.responseCode == UMSResponseCodeSuccess) {
                NSLog(@"分享成功!");
    //            [GMUtils showTipsWithHUD:@"分享成功!" showTime:0.5];
            }
        }];
    }
    
    //微信好友分享按钮被点击
    - (void)WebChatBgViewClick{
        //    NSLog(@"%s", __func__);
        
        NSString *titleStr = self.webViewInnerTitle;// object.suiCiNian;
        NSURL *url = self.webView.URL;
        NSString *urlStr = url.absoluteString;
        NSString *shareStr = [NSString stringWithFormat:@"%@   %@", self.webViewInnerText, url];
        UIImage *logo = [UIImage imageNamed:@"Icon"];
        [UMSocialData defaultData].extConfig.wechatTimelineData.url = urlStr;
        [UMSocialData defaultData].extConfig.wechatTimelineData.title = titleStr;
        [UMSocialData defaultData].extConfig.wechatSessionData.url = urlStr;
        [[UMSocialDataService defaultDataService] postSNSWithTypes:@[UMShareToWechatSession] content:shareStr image:logo location:nil urlResource:[UMSocialData defaultData].urlResource presentedController:self completion:^(UMSocialResponseEntity *response) {
            
            if (response.responseCode == UMSResponseCodeSuccess) {
                NSLog(@"分享成功!");
    //            [GMUtils showTipsWithHUD:@"分享成功!" showTime:0.5];
            }
        }];
    }
    
    
    
    4.wkwebview在加载页面的时候

    假如传递进来的URL不带http:// 是不能够正确打开网页的。
    需要我们手动添加判断没有带http:// 的字符串我们应该添加进去:

    if (![self.jumpUrlString containsString:@"http://"]) {
                self.jumpUrlString = [NSString stringWithFormat:@"http://%@", self.jumpUrlString];
            }
    
    5.后台传递的空值到了iOS这里就变成了NSNull类型的值,需要对这种类型的值进行处理的话需要根据返回值的类型添加这样的拦截:
    NSString *open = dict[@"open"];
            if ([open class]==[NSNull class]) {
                dict[@"open"] = @"0";
            }
    
    6.去除导航栏/tabbar上面的黑线

    去除tabbar上的黑线一般做法是在tabbar上覆盖覆盖一张背景图片,具体代码,在自定义Tabbar里的didload方法里添加,如下代码

    - (void)viewDidLoad {
     [super viewDidLoad]; 
    //设置tabbar背景颜色
     [[UITabBar appearance] setBackgroundColor:[UIColor whiteColor]];
     [[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];
     [[UITabBar appearance] setTintColor:ButtonColor];
     [[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tabbarImage.png"]];
     // [UITabBar appearance].clipsToBounds = YES; 
    // 添加的图片大小不匹配的话,加上此句,屏蔽掉tabbar多余部分 
     [[UITabBar appearance] setShadowImage:[UIImage imageNamed:@"tabbarImage.png"]];}
    

    导航NavigationBar的黑线条,去除相对容易,如果需要全局的,只需,在AppDelegate的didFinishLaunchingWithOptions方法中添加两行代码:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; 
    [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; return YES;}
    
    
    7.静态库对应的版本

    模拟器:
    4s-5: i386
    5s-6s Plus: x86_64
    真机(iOS设备):
    armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代)
    armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2
    armv7s: iPhone 5、iPhone 5c (静态库只要支持了armv7,就可以在armv7s的架构上运行)
    arm64(注:无armv64): iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、iPhone 7、iPhone 7 Plus、iPad Air、iPad Air2、iPad mini2、iPad mini3

    8.几个实用的网站

    CAAnimation中使用的keypath
    自由搜索图标网站
    生成开发用1、2、3倍图插件
    利用svg生成ttf字体网站

    9.常见面试题目

    地址:链接

    10.iOS开发常见问题-XIB自动拉伸问题

    从xib中加载进来的控件的autoresizingMask
    属性值默认是UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight

    如果一个控件显示出来的大小和当初设置的frame大小不一致,有可能是因为autoresizingMask
    属性值包含了UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
    ,解决方案:
    控件.autoresizingMask = UIViewAutoresizingNone;

    11.控件部分圆角
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(5, 5)];
            CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
            maskLayer.frame = self.bounds;
            maskLayer.path = maskPath.CGPath;
            self.layer.mask = maskLayer;
    
    12.xcode8 图片imageview图片圆角不显示的bug

    解决方法1:
    翻了下墙查了一下,在imageView调用clipToBounds的之前,[super awakeFromNib]之后,加上[self.contentView layoutIfNeeded];就可以了,反正我是解决了!

    - (void)awakeFromNib {
     [super awakeFromNib]; [self layoutIfNeeded]; 
    self.tag2label.layer.cornerRadius=self.tag2label.frame.size.height/2; 
    self.tag2label.clipsToBounds=YES;}
    

    解决方法2:

    把原来写在(void)awakeFromNib的代码
    替换成 - (void)drawRect:(CGRect)rect

    13.UILabel文字过长时的文字省略位置
    • lineBreakMode:设置标签文字过长时的显示方式。
    • label.lineBreakMode = NSLineBreakByCharWrapping; //以字符为显示单位显示,后面部分省略不显示。
    • label.lineBreakMode = NSLineBreakByClipping; //剪切与文本宽度相同的内容长度,后半部分被删除。
    • label.lineBreakMode = NSLineBreakByTruncatingHead; //前面部分文字以……方式省略,显示尾部文字内容。
    • label.lineBreakMode = NSLineBreakByTruncatingMiddle; //中间的内容以……方式省略,显示头尾的文字内容。
    • label.lineBreakMode = NSLineBreakByTruncatingTail; //结尾部分的内容以……方式省略,显示头的文字内容。
    • label.lineBreakMode = NSLineBreakByWordWrapping; //以单词为显示单位显示,后面部分省略不显示。

    相关文章

      网友评论

      本文标题:开发中遇到的坑和部分心得1

      本文链接:https://www.haomeiwen.com/subject/vvxujttx.html