iOS 常见问题

iOS12上点击UITableViewCell 后,cell的subview背景色都消失了

原因:本来是想关闭cell选中效果,设置 selectedBackgroundView = UIView(),就导致了在iOS13上没问题,但是在iOS12上就出现了上述问题; 应该设置 selectionStyle 为 none, 达到上述效果,还能避免设置 bgView时创建View对象,增加内存开销

coding:

cell.selectedBackgroundView = UIView()

改为

cell.selectionStyle = .none

Xcode12 编译后,UITableViewCell/UICollectionView上Btn事件都不再响应,普通View touchBegin事件也不再响应

原因:Xcode12 时初始化 UITableViewContentView 时机变了,直接把subView 覆盖了;把subview添加到UITableViewContentView 上,而不是 cell上

addSubview(itemView)

改为

contentView.addSubview(itemView)

cell上所有subview都要按照上面的添加才行,否则就会出现事件不响应问题

view转化成image 失败

该控件一定要先确定superview, 获取上下文 UIGraphicsGetCurrentContext() 才会成功, 否则生成image就会失败;可以随便把它加到 view上, 生成图片后,再remove

OC 类.m文件已经 #import "Xxx-Swift.h", 还是报错找不到基类

xxx-Bridging-Header.h 文件已经引入基类了
方法一: 因为Base 还是OC类,OC类相互引用必须先 import
A.h

#import 
@interface A: Base
@end

改为

#import 
#import "Base.h"
@interface A: Base
@end

方法二: #import "Xxx-Swift.h" 放到OC类 A.h中
A.h 改为

#import 
#import "Xxx-Swift.h"
@interface A: Base
@end

OC 类引用不了Swift类

Swift 类改为继承于NSObject 类

class A {}

改为

class A: NSObject {}

在OC类里调用不了Swift 类的静态方法

Swift 类 使用 @objcMembers 修饰,方法就不需要使用 @objc修饰了

class A: NSObject {}

改为

@objc Members class A: NSObject {}

failed to emit precompiled header '/Users/user/Library/Developer/Xcode/DerivedData/xxx-dziofnnbyomgfmfskuccdbuptgto/Build/Intermediates.noindex/PrecompiledHeaders/xxx-Bridging-Header-swift_1ONXMOEYIQOMJ-clang_RXQH83D8K0AB.pch'

子工程本来没有unit testing, 添加后运行空的 testCase, 报上述错误,解决办法就是 单元测试target 的配置需要设置成和工程target的设置一样;
第一步 File -> New -> Target -> Unit Testing Bundle
第二步 选中 .xcodeproj文件,targets -> xxxTests -> Framework/Header Search Paths 设置成和工程target一样即可

升级 Xcode12.3 后编译报错

  • Project.xcodeproj Building for iOS Simulator, but the linked and embedded framework 'xx.framework' was built for iOS + iOS Simulator.
    解决办法:
Xcode -> File -> Project Settings -> Per-User Project Settings -> Build System -> Legacy Build System(Deprecated)

在 Xcode9 的时候,就推出了 New Build System,作用就是提高编译速度; 在 Xcode10 的时候改为默认了,而 Per-User Project SettingsUse Shared Setting; 升级到 Xcode12.3 后此处设置也要改了。

上面的办法只是治标不治本,也牺牲了 Xcode 的构造优化,最好还是催促第三方提供新的版本,避免此问题。

New Build System 带来的具体构建编译提升可以参考 文章

你可能感兴趣的:(iOS 常见问题)