iOS Small Skills: UITableView-Anpassung (iOS10/iOS14/iOS16.0)

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

blog.csdn.net/z929118967/…

  1. FooterView registrieren
        [_tableView registerClass:[CRMNextBtnHeaderFooterView class] forHeaderFooterViewReuseIdentifier:@"CRMNextBtnHeaderFooterView"];
复制代码
  1. FooterView zurückgeben
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    CRMNextBtnHeaderFooterView *footerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"CRMNextBtnHeaderFooterView"];

//    footerView.models = self.viewModel.passwordRuleDescModel;

    return footerView;
}
复制代码
  1. 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.

  1. 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)sectionaufgerufen werden , da es sonst zu einer Endlosschleife kommt.
  2. heightForFooterInSection in iOS10 zeigt die Ansicht auch dann an, wenn die Höhe 0 zurückgibt

3.1 Ausführungsreihenfolge von Proxy-Methoden

tableView:numberOfRowsInSectionEs 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;
//}
复制代码

Guess you like

Origin juejin.im/post/7210658541212565562
ios