【iOS - 周总结】开发中遇到的小知识点(2018.12.10-2018.12.15)

1.WKWebview加载html文本图片过大,没有自适应屏幕宽高。

在用Webview加载html文本有时候会遇到加载的图片过大,不能自适应屏幕宽高的问题。那么如何解决这个问题?如何使图片自适应屏幕?很简单,只需要加一个js就可以。

直接上代码:

- (WKWebView *)detailWeb {
    if (!_detailWeb) {

        NSString *jScript = @"var meta = document.createElement(‘meta‘); meta.setAttribute(‘name‘, ‘viewport‘); meta.setAttribute(‘content‘, ‘width=device-width‘); document.getElementsByTagName(‘head‘)[0].appendChild(meta); var imgs = document.getElementsByTagName(‘img‘);for (var i in imgs){imgs[i].style.maxWidth=‘100%‘;imgs[i].style.height=‘auto‘;}";

        WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
        WKUserContentController *wkUController = [[WKUserContentController alloc] init];
        [wkUController addUserScript:wkUScript];

        WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
        wkWebConfig.userContentController = wkUController;

        _detailWeb = [[WKWebView alloc] initWithFrame:CGRectMake(0, AdaptedWidth(40), SCREEN_WIDTH, SCREEN_HEIGHT-TopNavHeight-AdaptedWidth(40)) configuration:wkWebConfig];
        _detailWeb.backgroundColor = [UIColor whiteColor];
        _detailWeb.navigationDelegate = self;

    }
    return _detailWeb;
}

2.scrollview使用Masnory自动布局

近期在项目中使用了Masnory。在一个关于我们的页面由于数据网络请求下来,且内容长度不一定,我就决定使用Masnory+ScrollView来实现。结果就出现了一些些问题。

使用过程就在代码里显示。

#import "ViewController.h"

#import "Masonry/Masonry.h"

@interface ViewController ()

@property (nonatomic, strong) UIScrollView *scrollView;

@property (nonatomic, strong) UIView *scrollContentView;

@property (nonatomic, strong) UILabel *titleLabel;
@property (nonatomic, strong) UILabel *subLabel;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    self.title = @"1";

    // 1.把scrollView添加到控制器view
    [self.view addSubview:self.scrollView];
    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view);
    }];

    // 2.给scrollView添加一个containerView
    // 重点 唯一 大小贴合scrollview
    // 即scrollView的子视图,即过渡视图contentSize,并设置其约束
    [self.scrollView addSubview:self.scrollContentView];
    [self.scrollContentView mas_makeConstraints:^(MASConstraintMaker *make) {
        // 注意点:首先确定contentView的位置。如果上下滑动等宽 左右滑动等高 类似于xib
        make.left.top.right.bottom.equalTo(self.scrollView);
        make.width.equalTo(self.scrollView);
    }];

    // 3.此后所有视图添加在scrollContentView上
    [self.scrollContentView addSubview:self.titleLabel];
    [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        // 注意点这里面设置子视图都要添加在contentView上 必须注意
        make.left.equalTo(self.scrollContentView.mas_left).offset(20);
        make.right.equalTo(self.scrollContentView.mas_right).offset(-20);
        make.top.equalTo(self.scrollContentView.mas_top).offset(100);
        make.height.mas_equalTo(40);
    }];

    [self.scrollContentView addSubview:self.subLabel];
    [self.subLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.scrollContentView.mas_left).offset(20);
        make.right.equalTo(self.scrollContentView.mas_right).offset(-20);
        make.top.equalTo(self.titleLabel.mas_bottom).offset(40);

        // 这个可写在这个位置 也可以在网络请求结束后添加
        make.bottom.equalTo(self.scrollContentView.mas_bottom).offset(-100);
    }];

    // 模拟网络请求
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        self.subLabel.text = @"精雕机哦跌跤就叠加偶家迪欧家饿哦就掉得哦啊基金的年纪大递交炯炯都我阿尔加到的骄傲的   待机饿哦案件都安静哦啊接打带哦接啊哦啊接待偶尔接爱哦的旧爱带哦精雕机带偶觉得 基调而骄傲的奥迪偶记带哦精雕机哦跌跤就叠加偶家迪欧家饿哦就掉得哦啊基金的年纪大递交炯炯都我阿尔加到的骄傲的   待机饿哦案件都安静哦啊接打带哦接啊哦啊接待偶尔接爱哦的旧爱带哦精雕机带偶觉得 基调而骄傲的奥迪偶记带哦精雕机哦跌跤就叠加偶家迪欧家饿哦就掉得哦啊基金的年纪大递交炯炯都我阿尔加到的骄傲的   待机饿哦案件都安静哦啊接打带哦接啊哦啊接待偶尔接爱哦的旧爱带哦精雕机带偶觉得 基调而骄傲的奥迪偶记带哦精雕机哦跌跤就叠加偶家迪欧家饿哦就掉得哦啊基金的年纪大递交炯炯都我阿尔加到的骄傲的   待机饿哦案件都安静哦啊接打带哦接啊哦啊接待偶尔接爱哦的旧爱带哦精雕机带偶觉得 基调而骄傲的奥迪偶记带哦精雕机哦跌跤就叠加偶家迪欧家饿哦就掉得哦啊基金的年纪大递交炯炯都我阿尔加到的骄傲的   待机饿哦案件都安静哦啊接打带哦接啊哦啊接待偶尔接爱哦的旧爱带哦精雕机带偶觉得 基调而骄傲的奥迪偶记带哦精雕机哦跌跤就叠加偶家迪欧家饿哦就掉得哦啊基金的年纪大递交炯炯都我阿尔加到的骄傲的   待机饿哦案件都安静哦啊接打带哦接啊哦啊接待偶尔接爱哦的旧爱带哦精雕机带偶觉得 基调而骄傲的奥迪偶记带哦";

        // 在上面写了这个位置可以不写 最好不要都写  会造成代码混乱
//        // 设置过渡视图的底边距(此设置将影响到scrollView的contentSize)
//        [self.scrollContentView mas_makeConstraints:^(MASConstraintMaker *make) {
//            make.bottom.equalTo(self.subLabel.mas_bottom).offset(30);
//        }];
    });

    // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark - Lazy Setter
- (UIScrollView *)scrollView {
    if (!_scrollView) {
        _scrollView = [[UIScrollView alloc] init];
        _scrollView.backgroundColor = [UIColor greenColor];
    }
    return _scrollView;
}

- (UIView *)scrollContentView {
    if (!_scrollContentView) {
        _scrollContentView = [[UIView alloc] init];
        _scrollContentView.backgroundColor = [UIColor redColor];
    }
    return _scrollContentView;
}

- (UILabel *)titleLabel {
    if (!_titleLabel) {
        _titleLabel = [[UILabel alloc] init];
        _titleLabel.text = @"title";
        _titleLabel.textColor = [UIColor blackColor];
        _titleLabel.backgroundColor = [UIColor whiteColor];
        _titleLabel.font = [UIFont systemFontOfSize:16];
        _titleLabel.numberOfLines = 1;
    }
    return _titleLabel;
}

- (UILabel *)subLabel {
    if (!_subLabel) {
        _subLabel = [[UILabel alloc] init];
        _subLabel.textColor = [UIColor blackColor];
        _subLabel.backgroundColor = [UIColor whiteColor];
        _subLabel.font = [UIFont systemFontOfSize:16];
        _subLabel.numberOfLines = 0;
    }
    return _subLabel;
}

@end

参考:博客一博客二

3.设置label的最小字体。

 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(30, 100, 100, 30)];
    label.text = @"fjirfjirjfi积分敌人的积极对得金蝶鸡的解决跌阿达啊打发 啊打发";
    label.adjustsFontSizeToFitWidth = YES;
    label.font = [UIFont systemFontOfSize:18];
    label.textColor = [UIColor blackColor];
//    label.minimumFontSize = 14;
    label.minimumScaleFactor = 0.5;
    [self.view addSubview:label];

在6.0系统后minimumFontSize属性已经被弃用。推荐使用minimumScaleFactor。

注意点:

1、0<minimumScaleFactor<1时才能达到效果。(字体10,想要最小字体5,设置0.5即可)

2、另外要设置adjustsFontSizeToFitWidth=YES.

3、还有需要UIlabel的行数是1的时候才有用,多行的label是不行的

4、minimumScaleFactor默认值是0,此时最小字体就是设置的字体大小,和1的效果一样。

原文地址:https://www.cnblogs.com/weicyNo-1/p/10123555.html

时间: 2024-10-24 21:24:34

【iOS - 周总结】开发中遇到的小知识点(2018.12.10-2018.12.15)的相关文章

【iOS - 周总结】开发中遇到的小知识点(2018.12.17-2018.12.22)

本周知识点遇到的少. 部分知识点是关于图表的,已在前几篇文章中显示. 1.键值监听要注意关闭 在一个播放视频的页面返回后,在6s上运行没问题,可是在5s上运行会崩溃.我查看日志发现是kvo的问题.发现我在页面消失后没有去除观察者.从而出现崩溃. // 在viewdidload中 // 监听播放 [self.avPlayer addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context

【周总结】开发中遇到的小知识点(2019.01.14-2019.01.19)

本周还是比较轻松的,小程序开发也接近了尾声,就是一些简单的修改了.我也就有了时间来回归老本行,重写iOS.这周我花了一些时间来把之前仿写的Swift项目完成.这个应用比较简单,但是实用点还是不少的.下面听我一一道来. 首先是搭建框架,在之前OC中我有自己的一套框架,用起来比较顺手.于是在swift中我也准备弄一套类似的框架.在最开始我失败了.在我创建父控制器的时候,我创建新的子控制器继承他发现不能自动生成viewdidload()方法.后来慢慢就好了,这应该是编译器的问题.靠苹果自己解决了. 然

(iOS)开发中收集的小方法

1.颜色转变成图片 - (UIImage *)createImageWithColor:(UIColor *)color {     CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);     UIGraphicsBeginImageContext(rect.size);     CGContextRef context = UIGraphicsGetCurrentContext();     CGContextSetFillColorWithCo

Android开发中遇到的小问题 一

1)想要ListView活着Girdview左右留些空隙,但Scrollbar要在屏幕最右边 在xml中加入 android:paddingLeft="8dp" android:paddingRight="8dp" android:scrollbarStyle="outsideOverlay" 2)用XML实现一个圆角矩形的drawable <?xml version="1.0" encoding="utf-8

iOS开发中的那些小技巧

一,前言 看到这个图,你会想起谁?是不是想起了,曾经的用户名输入框,密码输入框... 那么,问题来了:作为iOS开发的你,这个输入框你是怎么实现的,成为关键. 二,方案 方案1:弄一个UIView,在这个视图上分别放三个控件:UIImageView,UILabel与UITextField.(这个方案很直接,如果你只是简单的直接将三个控件放到视图上,那么你的月薪暴露了,最多3K.如果你是对这个视图重写了,将那三个控件封装起来了,放在.h文件,那你的月薪应该是3.5K,如果是将那三个控件放到.m文件

Snail—iOS开发中得一些小技巧

开发中 常常会使父视图的透明度改变,而子视图不受父视图的影响,则下面这段代码可以完美解决.... fatherView.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.6]; 版权声明:本文为博主原创文章,未经博主允许不得转载.

JAVA开发中遇到的小白点

这里主要是自己个人开发中遇到的一些小问题,自己攒起来,来弥补自己薄弱的JAVA基础,大神不要见笑 1. DateFormat格式化的HH和hh区别: public static boolean compare_date(String DATE1, String DATE2) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date dt1 = df.parse(DATE1); Date dt2 =

Android开发中实现桌面小部件

在Android开发中,有时候我们的App设计的功能比较多的时候,需要根据需要更简洁的为用户提供清晰已用的某些功能的时候,用桌面小部件就是一个很好的选择,即App Widget,下面我们就用Android studio来创建一个简单的桌面小部件: 选择New->Widget->App Wight                                                                 接下来设置App Widget的一些信息               

初学MySQL中的一些小知识点

写在前面,小弟初用博客记录学习路上的一点点小知识点,其中可能有个人理解方面的误差,或不明白的地方.希望各位大牛纠正指导,小弟感激不尽!这并不是什么帮助别人解决问题的文章,只是小弟将学习到的内容一一写在博客上,这样方便以后复习,还恳请大家勿喷.. 一.进入MySQL客户端 1.客户端可以通过.../MySQL/bin目录下的sql.exe运行客户端. 1.1:访问方式一: -u root -p /*可以直接在这段代码的后面添加密码,也可以按回车后再输入密码*/ 1.1:访问方式二: --host