大字模式和正常模式切换,启动还是白屏
你好,请教一下,第一次我在正常模式,框架修复白屏成功,然后我切换大字模式,白屏一直存在,请问可以怎么处理呀
我查看了下app沙盒,有两张启动屏图,一张正常,一张白色
你好,我在iPhone上没有找到你说的大字模式,请问你指的是“设置”->“显示与亮度”->“文字大小”这里调整文字大小吗?我尝试将文字大小调到了最大,但是没有复现你说的问题。请你具体描述一下你遇到的问题,最好提供一下视频或详细的复现步骤。
他应该是指“设置-显示与亮度-显示(缩放显示)-更大字体”
@lukapool 是这里设置的,我调试时,发现启动屏获取图片方法可能会因为嵌套,获取不到图片视图
@lukapool 是这里设置的,我调试时,发现启动屏获取图片方法可能会因为嵌套,获取不到图片视图
按照“设置-显示与亮度-显示(缩放显示)-更大字体”这个方式选择更大字体,确实会出现你说的问题。由于我之前从来没用过该功能所以未考虑到这方面,对你造成的困扰十分抱歉,我会尽快解决该问题。
另外,你提到 “启动屏获取图片方法可能会因为嵌套,获取不到图片视图” , 这句话我没明白你的意思?麻烦你看到了具体解释一下这句话的意思。
类似于这种结构:
可能需要递归遍历子视图,我对框架原理还不是很了解,看是否需要递归遍历所有子视图。现在遍历只拿到了UIStackView,嵌套的图片视图拿不到的。
类似于这种结构:
可能需要递归遍历子视图,我对框架原理还不是很了解,看是否需要递归遍历所有子视图。现在遍历只拿到了UIStackView,嵌套的图片视图拿不到的。
框架内部确实有遍历启动图的子视图的逻辑,但是没有遇到过你描述的 “只拿到了UIStackView,嵌套的图片视图拿不到的” 这种情况;另外,你遇到的关于开启大字模式后启动图问题,跟这个应该没有关系,我正在解决该问题。
/// 获取UIView上关于UIImage的所有位置数据。
+ (NSArray<NSValue *> *)ll_imageInfoFromView:(UIView *)aView {
NSMutableArray<NSValue *> *imageFrames = [NSMutableArray array];
for (UIImageView *imageView in aView.subviews) {
if (imageView.isHidden) { continue; }
if (![imageView isKindOfClass:UIImageView.class]) { continue; }
if (imageView.image == nil) { continue; }
// 计算image在imageView中的具体位置。
CGRect imageRect = [imageView.image ll_CGRectWithContentMode:imageView.contentMode viewSize:imageView.bounds.size clipsToBounds:imageView.clipsToBounds];
// 计算image在view中的具体位置。
CGFloat x = CGRectGetMinX(imageView.frame) + CGRectGetMinX(imageRect);
CGFloat y = CGRectGetMinY(imageView.frame) + CGRectGetMinY(imageRect);
CGFloat width = CGRectGetWidth(imageRect);
CGFloat height = CGRectGetHeight(imageRect);
[imageFrames addObject:[NSValue valueWithCGRect:CGRectMake(x, y, width, height)]];
}
return [imageFrames copy];
}
我设置的启动图,view第一个子视图嵌套的是UIStackVIew,然后再UIStackView里面添加的图片视图,上面这段代码遍历的时候只会拿到UIStackView容器视图,图片视图是拿不到的,会对后续修复逻辑有影响,直接就return不执行后续逻辑了,可以写demo验证一下;如果直接将图片加到启动屏view上,是没啥问题的。辛苦帮忙看放大模式兼容处理了。
/// 获取UIView上关于UIImage的所有位置数据。 + (NSArray<NSValue *> *)ll_imageInfoFromView:(UIView *)aView { NSMutableArray<NSValue *> *imageFrames = [NSMutableArray array]; for (UIImageView *imageView in aView.subviews) { if (imageView.isHidden) { continue; } if (![imageView isKindOfClass:UIImageView.class]) { continue; } if (imageView.image == nil) { continue; } // 计算image在imageView中的具体位置。 CGRect imageRect = [imageView.image ll_CGRectWithContentMode:imageView.contentMode viewSize:imageView.bounds.size clipsToBounds:imageView.clipsToBounds]; // 计算image在view中的具体位置。 CGFloat x = CGRectGetMinX(imageView.frame) + CGRectGetMinX(imageRect); CGFloat y = CGRectGetMinY(imageView.frame) + CGRectGetMinY(imageRect); CGFloat width = CGRectGetWidth(imageRect); CGFloat height = CGRectGetHeight(imageRect); [imageFrames addObject:[NSValue valueWithCGRect:CGRectMake(x, y, width, height)]]; } return [imageFrames copy]; }我设置的启动图,view第一个子视图嵌套的是UIStackVIew,然后再UIStackView里面添加的图片视图,上面这段代码遍历的时候只会拿到UIStackView容器视图,图片视图是拿不到的,会对后续修复逻辑有影响,直接就return不执行后续逻辑了,可以写demo验证一下;如果直接将图片加到启动屏view上,是没啥问题的。辛苦帮忙看放大模式兼容处理了。
确实有这个问题,如果UIImageView嵌套在UIScrollView、UIStackView等视图内的话,目前会无法获取到UIImage显示区域,最终可能会导致修复启动图失败,该问题正在修复中。
在大字模式下的问题比较复杂,该问题也正在解决。
好的
