Xcode 7 iOS 9 UITableViewCell Separator Inset probleem

Dit is geen vraag, maar een oplossing voor het probleem waarmee ik werd geconfronteerd.

In Xcode 7, wanneer de applicatie wordt uitgevoerd op iOS 9 op iPad-apparaten, laat de UITableViewCellwat marge over aan de linkerkant van de UITableView. En het apparaat naar het landschap draaien zou de marges vergroten.

De oplossing die ik heb gevonden is:

cellLayoutMarginsFollowReadableWidthinstellen op NO.

self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;

Deze eigenschap is alleen beschikbaar in iOS 9. U moet dus een voorwaarde plaatsen om de iOS-versie te controleren, anders loopt deze vast.

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_8_1)
{
    self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;
}

Antwoord 1, autoriteit 100%

iOS 9 en hoger:

Dit komt door een nieuwe functie die leesbare inhoudsgidsen wordt genoemd. Het biedt marges die geschikt zijn om te lezen. Dus op iPhone en staande iPad zijn het erg kleine marges. Maar in het landschap, iPad zijn ze groter. In iOS 9 volgen de UITableViewCell-marges standaard de leesbare inhoudsgids.

Als je dat wilt stoppen, stel je cellLayoutMarginsFollowReadableWidthvan tableView in op NO/false.

Bron:https://forums.developer.apple. com/thread/5496


Antwoord 2, autoriteit 33%

Tot iOS 9

In viewDidLoad

Doelstelling-C

- (void)viewDidLoad {
    [super viewDidLoad];
    //Required for iOS 9
    if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 9.0) {
        self.testTableView.cellLayoutMarginsFollowReadableWidth = NO;
    }
}

Snel

override func viewDidLoad() {
    super.viewDidLoad()
    if #available(iOS 9.0, *) {
        tableViewDiet.cellLayoutMarginsFollowReadableWidth = false
    }
}

Voeg in TableViewDelegate-methoden de volgende code toe:

Doelstelling-C

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    // Remove seperator inset
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }
    // Prevent the cell from inheriting the Table View's margin settings
    if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
        [cell setPreservesSuperviewLayoutMargins:NO];
    }
    // Explictly set your cell's layout margins
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}

Snel

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    // Remove seperator inset
    if cell.respondsToSelector(Selector("setSeparatorInset:")) {
        cell.separatorInset = UIEdgeInsetsZero
    }
    // Prevent the cell from inheriting the Table View's margin settings
    if cell.respondsToSelector(Selector("setPreservesSuperviewLayoutMargins:")) {
        cell.preservesSuperviewLayoutMargins = false
    }
    // Explictly set your cell's layout margins
    if cell.respondsToSelector(Selector("setLayoutMargins:")) {
        cell.layoutMargins = UIEdgeInsetsZero
    }
}

Antwoord 3, autoriteit 8%

Ik hoop dat dit nuttig is.

if #available(iOS 9.0, *) {
      myTableView.cellLayoutMarginsFollowReadableWidth = false
}

Antwoord 4

readableContentGuideis een lay-outgids die al aan elke UIViewis toegevoegd.

Dit is om ervoor te zorgen dat de gebruiker zijn hoofd niet hoeft te draaien om de inhoud te lezen.

Als je de leesbare inhoudsgids wilt volgen, doe dan het volgende:

let baseSection = UIView()
contentView.addSubview(baseSection)
baseSection.translatesAutoresizingMaskIntoConstraints = false
let insets = UIEdgeInsets(top: 4, left: 0, bottom: 4, right: 0)
baseSection.leadingAnchor.constraint(equalTo: readableContentGuide.leadingAnchor, constant: insets.left).isActive = true
baseSection.trailingAnchor.constraint(equalTo: readableContentGuide.trailingAnchor, constant: -insets.right).isActive = true
baseSection.topAnchor.constraint(equalTo: contentView.topAnchor, constant: insets.top).isActive = true
baseSection.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -insets.bottom).isActive = true

Opmerking: in de bovenstaande code gebruiken de onderste en bovenste ankers de contentView in plaats van de readableContentGuidezodat de verticale marges van de inhoud veranderen op basis van de tableView.rowHeight.

Other episodes