Dieser Artikel nimmt am "Golden Stone Project" teil
Einführung
Wenn Sie den Code gemäß der Entwicklungsspezifikation schreiben, gibt es kein Anpassungsproblem bezüglich UITableView.
- Wenn Sie UITableViewHeaderFooterView gemäß der Spezifikation verwenden, gibt es kein Fußzeilenproblem von horizontalen und vertikalen Bildschirmumschaltszenen in iOS16.
- Wenn Sie die Unteransicht von UITableViewCell gemäß der Spezifikation zu UITableViewCellContentView hinzufügen, gibt es kein Problem, von iOS14 blockiert zu werden.
- Wenn sowohl
tableView:viewForFooterInSection:
die als auch die t-ableView:heightForFooterInSection:
Methode auskommentiert sind, gibt es kein Problem, dass iOS10 die Ansicht anzeigt, selbst wenn die heightForFooterInSection-Höhe 0 zurückgibt.
I iOS16.0 Anpassung der horizontalen und vertikalen Bildschirmumschaltung
Nach dem Aufrufen der Bildschirmübertragungsmethode muss die Ansicht den Frame erneut aktualisieren
1.1 Holen Sie sich den Status des aktuellen horizontalen und vertikalen Bildschirms
- (UIInterfaceOrientation)interfaceOrientation {// Aktuellen Bildschirmstatus abrufen if (@available(iOS 13.0, *)) { return [UIApplication sharedApplication].windows.firstObject.windowScene.interfaceOrientation; } return [[UIApplication sharedApplication] statusBarOrientation]; }
1.2 Nach Anpassung der Bildschirmübertragungsmethode in iOS16.0 muss der Rahmen der Ansicht erneut aktualisiert werden
Problem: Nach der Rückkehr aus der elektronischen Unterschriftsschnittstelle ist der Rahmen der Fußzeile falsch
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIButton *nextBtn = [ControlManager getButtonWithFrame:CGRectMake(KWratio(30), KWratio(25), kWidth - KWratio(60), KWratio(45)) fontSize:displayFontSize(15.0f) title:@"提交" titleColor:[UIColor whiteColor] image:[UIImage new] backgroundColor:BASE_RED_COLOR cornerRadius:KWratio(5)];
return xxx;
}
复制代码
Grund: Nach dem Aufruf der Bildschirmübertragungsmethode in iOS16.0 muss die Ansicht, wenn das automatische Layout nicht verwendet wird, den Frame erneut aktualisieren.
Lösung: Footer und Header anpassen (UITableViewHeaderFooterView statt titleForHeaderInSection)
1.3 Benutzerdefinierte Fußzeile
UITableViewHeaderFooterView oder titleForHeaderInSection
- FooterView registrieren
[_tableView registerClass:[CRMNextBtnHeaderFooterView class] forHeaderFooterViewReuseIdentifier:@"CRMNextBtnHeaderFooterView"];
复制代码
- FooterView zurückgeben
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
CRMNextBtnHeaderFooterView *footerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"CRMNextBtnHeaderFooterView"];
// footerView.models = self.viewModel.passwordRuleDescModel;
return footerView;
}
复制代码
- FooterView implementieren
@interface CRMNextBtnHeaderFooterView : UITableViewHeaderFooterView
@property (nonatomic , weak) UIButton *nextBtn;
@property (nonatomic , weak) UIButton *cancelBtn;
@end
复制代码
II UITableViewCell-Kompatibilitätsproblem lösen (iOS14-Anpassung)
kunnan.blog.csdn.net/article/det…
2.1 Problemanalyse
Die Teilversuche von iOS14 UITableViewCell können nicht auf Gesten wie Klicken oder Schieben reagieren. Es wurde festgestellt, dass die Zellen mit Problemen im Grunde direkt zur Zelle hinzugefügt wurden. Durch die Analyse der DebugViewHierarchy-Ansicht, die mit Xcode geliefert wird, wurde festgestellt, dass der Grund für Das Problem ist: Es wird von der UITableViewCellContentView blockiert, die mit dem System geliefert wird
2.2 Lösungen
Praktiken, die geändert werden müssen
cell.contentView.addSubView(tempView1)
复制代码
Globale Modifikationsanpassung
//
// UITableViewCell+CRMaddSubView.m
// Housekeeper
//
// Created by mac on 2020/9/18.
// Copyright © 2020 QCT. All rights reserved.
//
#import "UITableViewCell+CRMaddSubView.h"
@implementation UITableViewCell (CRMaddSubView)
+ (void)load {
// Swizzle addSubView
[UITableViewCell sensorsdata_swizzleMethod:@selector(addSubview:) withMethod:@selector(kunnan_addSubview:)];
}
- (void)kunnan_addSubview:(UIView *)view {
if ([view isKindOfClass:NSClassFromString(@"UITableViewCellContentView")]) {//允许 addSubView UITableViewCellContentView
[self kunnan_addSubview:view];//实现方法,因为已经进行了 swizzle,相当于调用原来的方法
} else {//
[self.contentView addSubview:view];
}
}
@end
复制代码
III Anpassungsproblem von UITableView im iOS10-System
Da es derzeit im Grunde kein echtes Gerät für iOS10 gibt, können Sie den Simulator herunterladen, um iOS10 zu testen.
tableView numberOfRowsInSection:QCTReceiptsubFilterViewSection4KeyTypeTitle]
Die Ausführungsreihenfolge der Verwendung ist in iOS10 sehr speziell und kann nicht in der Methode- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
aufgerufen werden , da es sonst zu einer Endlosschleife kommt.- heightForFooterInSection in iOS10 zeigt die Ansicht auch dann an, wenn die Höhe 0 zurückgibt
3.1 Ausführungsreihenfolge von Proxy-Methoden
tableView:numberOfRowsInSection
Es kann nicht in einer Methode - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
aufgerufen werden , da es sonst eine Endlosschleife verursacht.
3.2 Darstellung der Heckansicht
Der korrekte Weg, viewForFooterInSection in iOS10 nicht anzuzeigen, besteht darin, sowohl die Methoden tableView:viewForFooterInSection:
als auch t auszukommentierenableView:heightForFooterInSection:
//- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
//
// return 0;
//
// return kAdjustRatio(92+10);
//}
//
//- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
// *footerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@""];
//
// footerView.type = self.type;
// footerView.models = self.viewModel.datas[section];
// return footerView;
//}
复制代码