UI
iOS UI绘制
刘小哈哈哈
这个作者很懒,什么都没留下…
展开
-
iOS 分别对一张图的局部进行磨砂,拼接起来不能贴合
经过多次尝试,还是不能完全贴合,后来发发现,磨砂都是对目前没有可以展示的内容进行磨砂的,比如上半部份,虽然图片是和下面的图片大小一样,但是其超处父视图的部分没有展示(clipsToBounds = YES),导致上半部分只对上面展示的那一部分进行磨砂,而磨砂会在边界留下分割线效果,就导致和下半部份不能贴合,需求,由于视图层级的原因,需要对图片分开进行磨砂, 然后组合在一起。就是上半部份和下半部份没有完全贴合,而是上半部分有明显的边界。但是进行磨砂的时候发现一个问题,如图。原创 2023-08-23 08:05:41 · 1348 阅读 · 0 评论 -
iOS 隐藏 Tabbar顶部细线
自定义 继承于UITabBar 的 视图, 重写layoutSubViews,隐藏 _UIBarBackgroundShadowContentImageView 类型的视图。经过反复测试,是 一个类型为 _UIBarBackgroundShadowContentImageView。的视图造成的顶部细线。原创 2023-07-11 21:34:34 · 1263 阅读 · 0 评论 -
一个自定义中间放大CollectionViewLayout
根据cell距离屏幕中间的距离,设置cell的缩小系数,并通过设置 attributes.transform 缩小cell。原创 2023-07-09 15:53:30 · 288 阅读 · 0 评论 -
记录一个Masonry 添加约束导致的label 文案展示不全的问题
添加的约束比我们期望的要小,就导致横向无法容下期望的文字宽度,导致无法展示完全。原因,我们使用masonry 布局的时候,宽度会有细微的误差,导致我们实际。问题如图,蓝色label 中的文字没有展示完全,后面还有“情。使用frame 布局。原创 2023-06-26 23:15:50 · 536 阅读 · 0 评论 -
iOS 修改图片颜色
给UIImage 添加一个分类,并给分类添加一个方法, 该方法的实现如下。原创 2023-06-26 20:54:09 · 915 阅读 · 0 评论 -
修复添加iOS 灰色滤镜导致视图底部灰色的问题
在添加过灰色滤镜之后,tableView底部显示成了灰色代码如下.h调用的地方后来经过调查发现tableView的背景色是透明的,控制器的视图背景色也是透明的,cell是有背景色的,但是当我们滑动到底部的时候,cell是被拖到上面去了,这时候滤镜的颜色就会透出来。原创 2023-03-14 21:09:12 · 190 阅读 · 0 评论 -
记录一个iOS 因为计算误差 导致 collectionVIew cell 之间间隙过大的问题
设计稿如下在大部分机型上也没有问题,但是在iPhone 12 Pro max 上,出现了下面的问题如图即cell之间的缝隙变大了。原创 2023-03-09 20:53:07 · 270 阅读 · 0 评论 -
记录一个iOS tabar 消失的问题
在app中任意一个页面,点击某个功能按钮的时候, app都要选中第三个tab。原创 2023-02-20 21:15:35 · 695 阅读 · 0 评论 -
iOS 首页标题支持展示图片点击展示lottie动画实现方案
现状:app首页标题只支持展示文字。原创 2023-02-07 22:11:22 · 448 阅读 · 0 评论 -
iOS 黑白屏滤镜视图层级穿透原理
效果图 ,和第二种情况是一样的,因为滤镜视图添加到了self.view上面,并且self.view 白色的,滤镜的灰色就不会穿透。添加灰色滤镜是图的时候,滤镜视图从滤镜被添加到的视图开始向上穿透,知道被有背景言色的视图挡住为止。view2 由于是透明色,被灰色滤镜穿透了,view3是白色,没有被穿透。view 是透明色,滤镜添加到 view上面,view 被穿透了。由于这时候view的背景色是白色,就不会穿透了,所以完全成了白色。和第一种情况是一样的。原创 2023-01-11 00:09:01 · 330 阅读 · 0 评论 -
iOS CAShapeLayer 的几个用法
CAShapeLayer 和 UIBezierPath. 配合,生成一个黑色layer效果图。原创 2022-11-12 22:42:48 · 286 阅读 · 0 评论 -
iOS autoresizingMask 的原理及其使用
如果某个视图设置为则,该视图相对于父视图的的边距是不变的,可以变化长度和高度。原创 2022-09-30 16:40:24 · 273 阅读 · 0 评论 -
iOS 获取当前tableView 中展示屏幕里面的cell
我们只需要获取在contentInset里面的cell。原创 2022-09-01 21:50:20 · 2643 阅读 · 0 评论 -
iOS UIButton 在 UIControlStateHighlighted 状态下展示文案颜色的机制
如下面则UIControlStateHighlighted状态下,(即touchDown的时候),展示的颜色是UIControlStateNormal状态的颜色。原创 2022-07-19 12:25:08 · 461 阅读 · 0 评论 -
修复UICollectionView 没有到达底部安全区的问题
如图collectionView 没有到达屏幕底部,修复效果原创 2022-06-07 16:25:45 · 326 阅读 · 0 评论 -
记一次实现自定义UICollectionViewLayout
自定义UICollectionViewLayout 流程一 在 prepareLayout 创建布局属性//创建layout类,继承于系统类 UICollectionViewFlowLayout@interface TPShareCollectionViewFlowLayout : UICollectionViewFlowLayout@end/// 重写 prepareLayout 方法,并在该方法里面创建布局属性- (void)prepareLayout{ [super prep原创 2022-04-26 10:36:51 · 1009 阅读 · 1 评论 -
记录一个因为使用masonry 布局造成的宽度不准确的问题
问题表现如图,label 超出了cell的范围,明显的,计算出来的文字高度没有label真是高度大代码添加约束使用masonry, 计算高度使用的是frame///label 约束 [self.answerContentLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(57 * rectScale()); make.top.mas_equalTo(52原创 2022-04-25 15:03:16 · 602 阅读 · 0 评论 -
Attempted to access the table view‘s visibleCells while they were in the process of being updated
问题tableView的pagingEnabled = YES; 但是会出现一种情况tableView 停止滚动的便宜量不是高度的整数倍同时,打印台回报出下面的错误信息[Assert] Attempted to access the table view’s visibleCells while they were in the process of being updated, which is not allowed. Make a symbolic breakpoint at UITableV原创 2022-03-04 14:30:11 · 731 阅读 · 0 评论 -
iOS 关闭点击状态栏UITableView 滚动到顶部
self.tableView.scrollsToTop = NO;原创 2022-03-02 21:35:23 · 1005 阅读 · 0 评论 -
修复iOS开始播放视频有一个闪动
问题开始播放视频的时候,有一个闪动原因没有播放的时候,有封面图,开始播放之后,封面图消失,开始播放,这时候视频画面还没有展示,这个小的间隙就造成了闪动修复开始展示视频画面的时候,隐藏封面图- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {原创 2022-03-02 14:31:31 · 817 阅读 · 0 评论 -
iOS UITableView调用 reloadData之后同一个indexPath的cell 可能不是同一个对象
遇到一个问题 ,我们滚动到一个 cell的时候就会开始播放视频,但是在请求更多数据,并且刷新之后,播放视频的视图并没有添加到cell 上面。、代码如下图![请添加图片描述](https://img-blog.csdnimg.cn/6ae97e9f9308471a8e9873a1cb60966f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5YiY5YiY5bCP5Y2a,size_20,c原创 2022-03-02 14:24:44 · 465 阅读 · 0 评论 -
iOS 获取一个cell从屏幕中消失的时机
需求如上图,是一个竖视频页面,可以上下滑动,当当前视频从屏幕中滑出的时候,需要将播放页面移除,并暂停播放代码这里需要注意的是,偶尔的情况下,当前屏幕中的cell也会执行这个方法,所以这里需要添加一个判断,判断cell是否在屏幕中- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{原创 2022-02-24 14:25:29 · 4279 阅读 · 0 评论 -
iOS 获取scrollView将要 停止拖动的时候的目标偏移量, 实现抖音无缝播放效果
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset-{ /// 获取当前索引 NSInteger currentIndex = (*targetContentOffset).y/scrollView.bounds.size.height;原创 2022-02-12 21:44:30 · 1504 阅读 · 0 评论 -
masonry mas_updateConstraints 修改约束的问题,只能修改第一次添加约束的时候有的约束,而不能修改没有添加的约束
我们使用masonry 调用mas_updateConstraints接口的时候,需要修改首次添加约束的时候,添加过的约束,而不能修改首次添加约束的时候没有添加的约束如图,底部按钮展示明显错误了正确的展示应该是这样的这里来分析一下原因这是第一次展示蓝色视图的时候添加的约束(第一次添加约束使用update是没有问题的,相当于make)这里是修改蓝色视图的时候修改的约束,这里看下,其实第二次修改约束的时候就有问题了,因为第一次添加约束的时候并没有添加高度的约束,是..原创 2020-12-23 11:35:10 · 1832 阅读 · 0 评论 -
iOS cell 不能点击
1 我这里是该视图上面有一个透明的视图覆盖在上面c原创 2021-01-21 16:24:33 · 355 阅读 · 0 评论 -
iOS一个视图的- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法是否执行,取决点击点是否于其父视图范围内
首先,我们通过查看调用栈,查看 hittest方法的执行逻辑如上面两图所示,hittest的调用逻辑是这样的,从window开始 ,调用hitest, 在该方法中又去调用所有子视图的hittest方法,hittest方法中又会调用point inside,判断点击点是否在自己范围内,如果在自己范围内,就去调用子控件的hittest方法就是说,一个视图是否调用hittest方法,取决于其点击点是否在其父视图的范围内大致原理 :看触摸点是否在自己身上,最后从后往前遍历子控件,遍.原创 2021-01-24 09:49:48 · 1632 阅读 · 0 评论 -
layoutSubViews的执行时机
如图,我们自定义了一个view,继承UIScrollView发现,我们只初始化而不将view添加到另一个view上的时候,是不会触发layoutSubViews 方法的如图代码打印台中并没有打印调用layoutSubViews 方法当我们将该视图添加到另一个视图上的时候,就会触发layoutSubViews 方法如图,然后在视图上添加一个子视图,发现并不会触发layoutSubView,如图有发现当我们滚动scrollview的时候会触发如图...原创 2020-12-26 17:39:48 · 255 阅读 · 0 评论 -
iOS tableView添加子视图在cell的下面
[self.tableView reloadData]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self.tableView insertSubview:self.header_backgroundView atIndex:0]; });首先,在tableView...原创 2021-01-20 15:56:05 · 1080 阅读 · 2 评论 -
tableView group样式 第一个 cell 从y 35开始
group样式的 tableview, 默认第一个cell 是从35开始的,需要添加如下代码,使之从零开始 _tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, mScreenWidth, 0.001)];原创 2021-02-23 11:50:07 · 408 阅读 · 0 评论 -
tableView高度自适应 UITableViewAutomaticDimension
cell 高度UITableViewRowAnimationAutomatic,需要将tableView.estimatedRowHeight 设置一个预估高度原创 2020-12-28 17:34:34 · 411 阅读 · 0 评论 -
tableview 使一个子视图始终在cell 下面
如图,这样,使头部视图始终在cell的下面,可以在- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 代理方法里面调用 [self.tableView insertSubview:self.topView atIndex:0];...原创 2021-02-23 13:46:06 · 280 阅读 · 0 评论 -
对scrolview 的conteninset的进一步理解
水平方向滚动的scrollView, contentinset.left是偏移量最小的时候,内容范围即contentsize 距离bound左边的距离,contentInset.right是偏移量最大的时候,内容范围(contentsize)距离bounds右边的距离如图所示代码UI效果如图,下面是另一个demo,注意,绿色的是scrollView最小偏移量最大偏移量...原创 2021-01-24 11:34:48 · 199 阅读 · 0 评论 -
记录一个tableView刷新不及时导致的数组越界崩溃
1 崩溃报错信息[__NSArrayI objectAtIndexedSubscript:]: index 2 beyond bounds [0 .. 1]明显的数组越界这里是崩溃时的调用栈,崩溃在了cellForRow方法中情景分析:时机是在我点击tabbar 的 me页面 的时候,me页面的viewWillappear 中会执行一些操作改变数据源,但是改变数据源之后没有reloadDatareloadData是在viewDidapear中执行的但是,由于我们.原创 2021-05-08 20:43:24 · 632 阅读 · 0 评论 -
grouped风格的 tableview区尾默认高度问题
需求需要用到grouped 风格的 tableview1 首先要设置预估高度 _tableView.estimatedSectionFooterHeight = 0.01;2 其次在代理方法中设置高度- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 5;}注意,不能只在代理方法中返回高度,预估高度必须设置,不然原创 2021-02-24 17:10:49 · 295 阅读 · 0 评论 -
使用masonry 添加约束,调用 layoutIfNeeded 之后仍然无法获取到frame(二)
如图,发现这样layouifneed之后是获取不到控件的frame 的(在添加约束之前调用了layoutIfneed)正确的方式方案一:去掉在懒加载中的layoutifneed只保留在添加约束之后的layoutifneed ,方案二:d原创 2021-08-30 11:02:32 · 851 阅读 · 0 评论 -
使用 masonry 添加 调用layoutIfNeeded 之后获取不到size
通常,我们使用masonry添加约束的时候,如果想要获取到控件的size,需要我们主动调用layoutIfneeded,这次遇到一个问题,调用了 layoutNeeded之后,仍然获取不到正确的size后来联想到我之前的用法,和这里新的用法对比,发现 我们调用layoutIfneeded 的时候,父视图还没有添加到window上, 后来将展示数据方法(里面调用了layoutifneeded)后移到添加到window之后就好了如图所以:如果要调用layoutIfnee...原创 2021-05-21 19:06:12 · 662 阅读 · 0 评论 -
iOS collectionView不同分区配置不同的装饰视图 DecorationView
达到的效果如图,纯图片分区和其他分区使用不同的装饰视图,下面的是白色装饰视图哦首先,要自定义一个layout, 然后,在初始化Layout的时候注册装饰视图如图需要注意的一点,创建装饰视图的过程是在创建装饰视图布局属性的时候系统完成的,所以,我们在代码中看不到返回装饰视图的地方我们如果要在某个分区使用某个视图,需要创建装饰视图的布局属性的时候,使用注册该装饰视图的kind即可,如图这里kind和装饰视图是一一对应的,相当于cell 的identifier这里使用代理,原创 2020-12-15 17:31:53 · 776 阅读 · 2 评论 -
iOS collectionView添加子视图在cell下面
需求:将backgroundView 添加到collectionView的cell下面,要等到collecitonView 执行过reloadData之后,再执行 [collecitonView insertSubview:backgroundView atIndex:0];原创 2021-01-20 09:21:39 · 598 阅读 · 0 评论 -
layout.estimatedItemSize 实现 UICollectionViewCell撑起来自适应宽度
核心代码 layout.estimatedItemSize = CGSizeMake(100, 200);cell中添加约束使用距离左右的距离 [self.title mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(10); make.right.mas_equalTo(-10); }];UICollect原创 2020-12-25 11:55:46 · 1243 阅读 · 0 评论 -
UICollectionViewFlowLayout 切换布局方向的时候,不能使用estimatedItemSize 自适应布局
如图点击最后一个选项之后,需要滚动到最右边的,由于使用了自适应大小,切换方向,导致获取到的contentSize配置layout 的estimatedItemSizecellAlignmentlayout.estimatedItemSize = CGSizeMake(100, 28)切换布局方向if (self.cellAlignmentlayout.scrollDirection == UICollectionViewScrollDirectionHorizontal) { ...原创 2020-12-25 15:27:48 · 737 阅读 · 2 评论