当有人尝试用错误的密码解锁设备时,这个应用会通过前置摄像头拍照并播放警示音。 今天在这篇文章教大家一些我用来减小应用体积的技巧。这些技巧都简单且易用,会在现在或将来为大家提供一些帮助。...这些设备在印度,巴其尔等非洲发展中国家占有大量市场,你可以在这些地方获得大量的用户。 让你的应用大小保持最佳变得尤其重要。你的应用体积越小,你的用户就有更多的空间来存储他们的视频和图片。...所以,如果你的应用体积太大,将会需要更多的时间来下载(更可能的情况时用户根本不会去下载)。同样的,大多数用户流量有限,用户下载的每个字节都是在花钱。...从 Apk Analyser 的输出来看,应用的原大小是 3.1MB。经过 Play 商店的压缩,大致是 2.5MB。 从截图中可以看出主要有 3 个文件夹占据了应用的大多数空间。...当你编译你的应用时,gradle 会将你的所有模块里的 .class 文件转换成 .dex 文件并将这些文件合成一个 classes.dex 文件。
包括一些信息,例如如何调整字间距以及缩放。最终,该对象包含的信息将用于文本绘制。该参数可为 nil 。 返回值 一个矩形,大小等于文本绘制完将占据的宽和高。...讨论 可以使用该方法计算文本绘制所需的空间。size 参数是一个constraint,用于在绘制文本时作为参考。...但是,如果绘制完整个文本需要更大的空间,则返回的矩形大小可能比 size更大。一般,绘制时会采用constraint 提供的宽度,但高度则会根据需要而定。...特殊情况 为了计算文本块的大小,该方法采用默认基线。如果NSStringDrawingUsesLineFragmentOrigin未指定,矩形的高度将被忽略,同时使用单线绘制。...(译者注:字体大小+行间距=行距) NSStringDrawingUsesDeviceMetrics: 计算布局时使用图元字形(而不是印刷字体)。
1.TableView不显示没内容的Cell 2.百分号的转换 3.禁止手机睡眠 4.跳进app权限设置 5.collectionView的内容小于其宽高的时候是不能滚动的,设置可以滚动: 6.设置navigationBar...上的title颜色和大小 7.统一收起键盘 8.导入自定义字体库 9.动态方法的动态执行 10.isKindOfClass和isMemberOfClass的区别 11.Label字体大小 12.为UIView...33、获取手机RAM容量 34、在UITextView中显示html文本 35、选中textField或者textView所有文本(我这里以textView为例) 36、隐藏UITextView/UITextField...光标 37、当UITextView/UITextField中没有文字时,禁用回车键 38、通知监听APP生命周期 39、获取collectionViewCell在屏幕中的frame 40、UITextField...UIApplicationDidChangeStatusBarFrameNotification 设备状态栏frame改变 UIApplicationBackgroundRefreshStatusDidChangeNotification 应用程序在后台下载内容的状态发生变化
这个问题在之前我们的随笔iOS学习——键盘弹出遮挡输入框问题解决方案中也有讲过对应的解决方案,但是该方案在最近的应用中还有点小问题,我们在这里重新进行处理好。...中的cell当有键盘弹出的时候表单整体会自动进行上移,我们需要编辑的区域正好可以在键盘的上方,这样我们正好也可以看到我们编辑的内容,方便我们进行修改和调整具体内容。 ...,开始编辑的时候返回当前cell相对屏幕的位置方便我们控制是否上移tableview,结束编辑时返回我们编辑框的内容方便进行记录。... 我们在对tableview的上移进行调整时,我们需要知道当前编辑的cell相对屏幕的位置,然后才能判断是否需要上移tableview以及上移多少。...,首先,我们再主控制器中定义几个属性来保存我们键盘弹出时tableview的contentOffset以及当前编辑cell的frame,然后在应用自定义cell时设定我们的两个回调block,当开始编辑时
实现这个效果的关键点只有两点: 获取正在输入内容在UITextView占用了多少行 让UITextView动态改变大小 一开始,为了解决第一个问题,我一直在考虑怎么获取换行事件,发现只用捕捉\n输入即可...所以感觉这个思路太麻烦 对于第一点,有一个方便的计算方法,就是获取UITextView内容的高度比上UITextView的字体的高度,即可得到当前的行数。...好了,知道其集成UIScrollView就好办了,因为UITextView只有在输入内容超过其显示范围才可以拖动,那就知道输入文字的bound就是UIScrollView的contentSize。...这样就知道输入内容的总大小了。 那每一行的高度呢? 按我以前的经验,行高差不多是字体大小的 4/3 倍.这样设值显示效果一般都挺好。所以可以设值一个宏定义来处理与字体相关的高度。...:(NSInteger)lines; @end 在每次输入内容的时候计算行数,声明一个变量保存上一次的行数,两次行数不一致即为发生换行 - (void)textViewDidChange:(UITextView
每个开发者采用的方式不同,有的开发者直接以modal/push的方式present出一个控制器,把tableViewCell上的内容传递到被modal/push的控制器的UITextView上,在UITextView...另外一种方法是直接在当前控制器(的界面)上以动画(甚至是没有动画)的形式弹出一个UITextView,在UITextView上修改文本内容,修改完成后再隐藏/移除UITextView,把内容重新显示到tableView...做的好的同学,可能还不忘弹出UITextView的时给tableView添加一个蒙版或者模糊效果以突出重点,提高用户的体验度。以上的两种方式算是中规中矩。...思路如下: 注意:以下操作全部是在didSelectRowAtIndexPath:方法中进行的 获取点击的那一行cell在tableView坐标系上的frame,并转换为view坐标系上的frame,...此处称为frame1 根据frame1获取点击的那一行cell 在cell上添加一个和label同样尺寸、同样坐标的UITextView,以让UITextView正好遮盖住label 把cell上的内容显示到
注意:我在添加约束的时候有个选项叫做updateFrame 如果勾选 会直接将Frame调整到真实值 ,而不需要再次update 。...因为UITextView内容的高度不会影响systemLayoutSizeFittingSize计算。 下面是UITextView的实例: ?...s.height : defaultHeight; return 1 + height; } 随UITextView高度改变Cell高度 当UITextView内容改变的时候,计算自身高度,然后通知...当非IB创建时,属性默认为YES;当IB创建View时,属性默认为NO。 案例2 在水平方向上放4张图片,图片等分。 1,首先在页面上拖拽1个imageView,将它的宽高都设置成50。...Baseline Relative:如果设置子视图间距的大小为基线到下一个视图的头部
: 选中后, 该 UITextView 控件有弹性, 拖动控件内容有弹回效果, 没有勾选时拖到边界僵硬的停止; -- Bounce Horizontally : 水平方向有弹性; -- Bounce...Touch Up Inside 等绑定事件; -- 下面是 UITextView 的控件拖动内容设置 : (2) UITextView 委托方法简介 UITextView 委托方法简介 : --...:" 方法 : 用户将要开始编辑 UITextView 内容时激发该方法; -- "- textViewDidBeginEditing : " 方法 : 用户开始编辑 UITextView 内容后 激发该方法...UITextView 控件指定范围的文本内容将要被替换时激发的方法; -- "- textViewDidChange : " 方法 : 文本内容发生改变时, 激发该方法; -- "- textViewDidChangeSelection..., 在没有导航栏的应用中, 需要有键盘附件来关闭键盘; -- 1.
CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示。...对此你在应用中,应该尽量减少不必要的属性修改。 当视图层次调整时,UIView、CALayer 之间会出现很多方法调用与通知,所以在优化性能时,应该尽量避免调整视图层次、添加和移除视图。...上面也说过,对这些属性的调整非常消耗资源,所以尽量提前计算好布局,在需要时一次性调整好对应属性,而不要多次、频繁的计算和调整这些属性。...常见的文本控件 (UILabel、UITextView 等),其排版和绘制都是在主线程进行的,当显示大量文本时,CPU 的压力会非常大。...尽管这实现起来非常麻烦,但其带来的优势也非常大,CoreText 对象创建好后,能直接获取文本的宽高等信息,避免了多次计算(调整 UILabel 大小时算一遍、UILabel 绘制时内部再算一遍);CoreText
,不要写全路径,因为软件更新或者重新安装沙盒路径会变 更新的流程是这样的:更新时,先在新的路径里安装新程序,然后把旧程序文件夹里的配置文件之类的文件拷贝到新的路径里去,然后删除旧程序 所以,如果数据库里保存的是绝对路径...、调用这个方法的view2、view2的所有子view都会调用layoutSubviews setFrame:只有在view设置frame且尺寸参数有不同的情况下调用 滑动UIScrollView时,scrollView...和其父view会调用 旋转屏幕会在viewController的根view调用 重新改变view的大小,其父view会调用 drawInRect: withAttributes:的参数怎么写 UIFont...这个属性的,但是UITextView没有,大家表示也是醉了。...UITextView有对应的回调,UITextField就没有。
前言 熟悉监管要求,掌握合规操作流程,避免App被降级或者下架。需要确保App有《隐私政策》,并且在用户首次启动App时就弹出《隐私政策》取得用户同意。...登录界面弹用户协议及隐私政策时,如果用户点击不同意,不能停留在弹框界面,需要隐藏弹框,否则无法通过OPPO安卓应用市场。...URL Webview) 效果图(点击demo的右上架文字进行中英文切换) 文本框信息对应的中英文key,用于本地化 "Explain3" = "向您说明,在使用我们的服务时,我们如何收集、使用、...本"; "Wemaycollect1"="您在使用我们的服务时,我们可能会收集和使用您的相关信息。...我们希望通过本"; "then_click_Agree" = " ,希望您仔细阅读,充分理解协议中的内容后再点击同意。"
在iOS6中,系统为UILabel,UITextView等这类文本渲染控件引入了NSAttributedString属性,有了NSAttributedString这个类,创建灵活多彩的文本控件变得十分轻松...所描述的内容转换为NSAttributedString示例。...试想,如果可以向一段文本中添加任意数据类型的文件,当用户点击这个文件时,可以获取到文件数据并进行业务逻辑处理,这将十分酷。...) NSFileWrapper *fileWrapper; 结合UITextView可以为NSAttributedString属性字符串添加超链接,在代码回调中监听此超链接的回调可以获取NSTextAttachment...当用户点击文件图标时,会将携带的gif文件数据进行打印。 专注技术,热爱生活,交流技术,也做朋友。 ——珲少 QQ群:203317592
NSDictionary *typingAttributes; 设置属性字符串文本属性字典 - (void)scrollRangeToVisible:(NSRange)range; 滚动textView使其显示在本一段文本...:(UITextView *)textView; 是否结束编辑 - (void)textViewDidBeginEditing:(UITextView *)textView; 开始编辑时触发的方法 -...(void)textViewDidEndEditing:(UITextView *)textView; 结束编辑时触发的方法 - (BOOL)textView:(UITextView *)textView...*)textView; 字符内容改变触发的方法 - (void)textViewDidChangeSelection:(UITextView *)textView; 选中内容改变触发的方法 - (BOOL...当文本中的URL进行链接时触发的方法 专注技术,热爱生活,交流技术,也做朋友。
在开发过程中,我们经常会用到UITextField、UITextView等文本框,然后这些文本框在点击之后会自动成为第一响应者(FirstResponder),并自动弹出软键盘。...具体解决方案有两种: 1、在当前页面设置点击事件,当点击事件发生时,注销当前视图的第一响应者或者设置当前摄入结束。...当点击事件发生在非选中区域时,则键盘会自动回收: 1 //在viewDidLoad中 添加点击手势,为了关闭键盘的操作 2 UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer...2、利用键盘上的 回车键 来进行设置当前UITextField、UITextView等文本框不是第一响应者,这种方法对UITextField、UITextView的应用不一样,需要区别进行。 ...; //UITextViewDelegate代理,当键盘输入变化时调用,可以通过该方法判断输入的内容 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange
注意1:局部设置与全局设置方法相同,但调用方法的对象变成了"self.navigationController.navigationBar" 注意2:局部设置必须遵循一个原则:"进入页面时修改,离开页面时还原...UI布局进行优化:视图控制器里面第一个被添加进去的视图是滑动类视图,并且其Frame是整个屏幕大小时,系统会自动调整其contenInset,以保证滑动视图里的内容不被UINavigationBar与UITabBar...但是对于普通的视图,此时我们仍然需要注意:非滑动视图的布局仍然要考虑导航栏和标签栏高度,注意不被遮挡,比如布局的时候加上导航栏高度,以免内容被导航栏遮挡。...我们可以通过一段代码来测试一下效果,在默认导航栏(半透明)的视图控制器里添加如下代码: //UITextView是滑动视图,内容自动向下偏移,不会被导航栏覆盖 UITextView *leftTextView...,默认值是UIRectEdgeAll,即:当前视图控制器里各种UI控件会忽略导航栏和标签的存在,布局时若设置其原点设置为(0,0),视图会延伸显示到导航栏的下面被覆盖。
在iOS或Android等移动端开发过程中,经常遇到很多需要我们输入信息的情况,例如登录时要输入账号密码、查询时要输入查询信息、注册或申请时需要填写一些信息等都是通过我们键盘来进行输入的,在iOS开发过程中...,一般用于进行输入信息的有两类:UITextField和UITextView,前者是单行输入文本框,后者是可滑动的多行输入文本框,在这整个开发过程中,我们需要控制键盘的弹出和收起、在输入结束的时候获取输入的信息...: / textViewDidEndEditing: 方法,这个方法就是方便我们在输入结束之后对文本框内容进行处理。... 还是在之前的分析中,我们知道在键盘弹出和收起时,系统都会发出对应的通知,所以我们可以在收到键盘弹出的时候判断键盘的位置和当前输入文本框的位置,如果有遮挡,就将当前视图进行一个向上平移,在收到键盘回收的通知时就平移到原先的位置...,然后在键盘弹出时通过为止比较确定是否平移,以及平移的offset。
自定义UITextView,带有placeholeder,可以设置placeholeder文字的大小和颜色。 如图: ?...自定义UITextView 集成简单,只需在所用到的控制器中导入YMTextView即可,下面是示例代码: 在ViewController.m中 #import "ViewController.h" #...[super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end 在YMTextView.h...NSString *placeholder; /** * 占位文字颜色 */ @property (nonatomic, strong) UIColor *placeholderColor; @end 在YMTextView.m...的文字发生改变时,UITextView自己会发出一个UITextViewTextDidChangeNotification通知 [[NSNotificationCenter defaultCenter
对此你在应用中,应该尽量减少不必要的属性修改。 当视图层次调整时,UIView、CALayer 之间会出现很多方法调用与通知,所以在优化性能时,应该尽量避免调整视图层次、添加和移除视图。...上面也说过,对这些属性的调整非常消耗资源,所以尽量提前计算好布局,在需要时一次性调整好对应属性,而不要多次、频繁的计算和调整这些属性。...常见的文本控件 (UILabel、UITextView 等),其排版和绘制都是在主线程进行的,当显示大量文本时,CPU 的压力会非常大。...尽管这实现起来非常麻烦,但其带来的优势也非常大,CoreText 对象创建好后,能直接获取文本的宽高等信息,避免了多次计算(调整 UILabel 大小时算一遍、UILabel 绘制时内部再算一遍);CoreText...这个只是我的一个设想,并不一定能实现或起作用。 如何评测界面的流畅度 最后还是要提一下,“过早的优化是万恶之源”,在需求未定,性能问题不明显时,没必要尝试做优化,而要尽量正确的实现功能。
对此你在应用中,应该尽量减少不必要的属性修改。 当视图层次调整时,UIView、CALayer 之间会出现很多方法调用与通知,所以在优化性能时,应该尽量避免调整视图层次、添加和移除视图。...上面也说过,对这些属性的调整非常消耗资源,所以尽量提前计算好布局,在需要时一次性调整好对应属性,而不要多次、频繁的计算和调整这些属性。...常见的文本控件 (UILabel、UITextView 等),其排版和绘制都是在主线程进行的,当显示大量文本时,CPU 的压力会非常大。...尽管这实现起来非常麻烦,但其带来的优势也非常大,CoreText 对象创建好后,能直接获取文本的宽高等信息,避免了多次计算(调整 UILabel 大小时算一遍、UILabel 绘制时内部再算一遍);CoreText...延时加载,是指首先加载当前必须的可视内容,在稍后一段时间内或特定事件时,再触发其他内容的加载。这种方式可以很有效的提升界面绘制速度,使体验更加流畅。
Swift项目中需要实现:一段文案默认最多显示3行,当超过三行时在末尾显示“更多”,当用户点击更多时,再展开显示所有文案: 期间遇到了一个类型转换的问题,在此记录说明一下: let attributedString...// 而下面的addAttribute那句 添加.link的value需要的类型是:NSRange?...// 系统无法自动将其转换,所以我需要手动转一下: // 可以根据 'Range?' 和 '完整字符串' 创建 NSRange?...let textView: UITextView = UITextView(frame: CGRect(x: 30, y: 100, width: 300, height: 100)) textView.backgroundColor...textView.delegate = self // 指定代理处理点击方法 textView.attributedText = attributedString view.addSubview(textView) 然后在代理方法里截获
领取专属 10元无门槛券
手把手带您无忧上云