一. 状态栏
1.黑暗模式切换状态栏的电量栏颜色无法切换问题
描述:info.plist 已经中已经设置了禁用黑暗模式 但是切换模式后电量等颜色显示有问题
解决办法:AppDelegate中添加如下代码
/// 解决 plist 文件禁用黑暗模式不生效问题
if #available(iOS 13.0, *) {
UIApplication.shared.statusBarStyle = .darkContent
} else {
UIApplication.shared.statusBarStyle = .default
}
2. 特殊情况状态栏背景色无法修改问题
/// 解决NavigationBarHidden = true 时候,颜色值无法修改问题
/// navigationController?.setNavigationBarHidden(true, animated: animated)
private let statusBar: UIView = UIView()
private func setStatusBarBackgroundColor(color: UIColor) {
if #available(iOS 13.0, *) {
statusBar.frame = UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame ?? CGRect.init(x: 0, y: 0, width: TSScreen.currentWidth, height: 20)
statusBar.removeFromSuperview()
statusBar.backgroundColor = color
UIApplication.shared.keyWindow?.addSubview(statusBar)
} else {
let statusBarWindow: UIView = UIApplication.shared.value(forKey: "statusBarWindow") as! UIView
let statusBar: UIView = statusBarWindow.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) {
statusBar.backgroundColor = color
}
}
}
override func viewWillAppear(_ animated: Bool) {
setStatusBarBackgroundColor(color: .white)
navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
statusBar.removeFromSuperview()
}
二. UICollectionView
1.单双排切换
// 解决单排拉到底部 再切换到双排后 顶部cell 空白的问题
DispatchQueue.main.asyncAfter(deadline: .now()) {
self.collectionView.reloadData()
}
三.UITableView
1.修改透明tableView的置顶sectionView的背景色
描述: UItabView为透明背景,sectionView也为透明效果, 需求置顶悬停的sectionView需要添加的背景色
/// 注册headerView
tableView.register(UserSectionView.classForCoder(), forHeaderFooterViewReuseIdentifier: "HeaderView")
/// 必须继承 UITableViewHeaderFooterView
class UserSectionView: UITableViewHeaderFooterView { }
// 不能用这种方式 设置sectionView
// let sectionView = UserSectionView()
// return sectionView
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderView")
let sectionView = UserSectionView()
header?.addSubview(sectionView)
sectionView.snp.makeConstraints{
maker in
maker.edges.equalToSuperview()
}
sectionView.backgroundColor = .clear
sectionView.config(title: pairList[section].title)
return header
}
// 置顶sectionView的位置
private var topSectionViewCount = 0
///获取置顶的section位置
private func getSectionHeaderView(){
var maxIndex = LONG_MAX
tableView.visibleCells.forEach{ item in
if let cellSection = tableView.indexPath(for: item)?.section, cellSection < maxIndex {
maxIndex = cellSection
}
}
topSectionViewCount = maxIndex
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let y = scrollView.contentOffset.y
let headerHeight = rootView.height
getSectionHeaderView()
let topView = tableView.headerView(forSection: topSectionViewCount)
if y <= headerHeight && y >= 0 {
// TODO
return
}
if y > headerHeight {
// TODO
}
}
2. ios10 UITableViewAutomaticDimension问题
tableview.estimatedRowHeight = UITableViewAutomaticDimension;
在iOS 10.0上所有的约束都失效,
原因为UITableView的估高导致的,在iOS10中,estimatedRowHeight必须要有一个值,否则就会页面默认44
网友评论