objective c - Xcode 7 iOS 9 UITableViewCell Separator Inset issue




objective-c xcode7 (3)

هذا ليس سؤالًا ، بل هو حل للمشكلة التي واجهتها.

في Xcode 7 ، عندما يتم تشغيل التطبيق على iOS 9 على أجهزة iPad ، تترك خلايا UITableView بعض الهامش على الجانب الأيسر من عرض الجدول. وتدوير الجهاز إلى أفقي سيزيد من الهوامش.

الحل الذي وجدته هو:

إعداد "cellLayoutMarginsFollowReadableWidth" إلى NO.

self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;

نظرًا لأن هذه الخاصية متوفرة فقط في نظام التشغيل iOS 9. لذا ، سيتعين عليك وضع شرط للتحقق من إصدار iOS ، وإلا فسوف تتعطل.

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

آمل أن تكون مفيدة للآخرين.


متأخرا قليلا. آمل أن تكون مفيدة لشخص آخر ...

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

readableContentGuide هو دليل تخطيط يضاف بالفعل إلى كل UIView

هذا لضمان عدم قيام المستخدم بإدارة رأسه لقراءة المحتوى.

إذا كنت تريد اتباع دليل المحتوى المقروء ، فاتبع ما يلي:

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

ملاحظة: في الكود الموجود أعلى وأسفل نقاط الارتساء ، استخدم ContentView بدلاً من readableContentGuide بحيث تتغير الهوامش العمودية للمحتوى بناءً على tableView.rowHeight .


الحل الأمثل حتى نظام التشغيل iOS 9

في viewDidLoad

ج موضوعية

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

سريع

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

في أساليب TableViewDelegate أضف التعليمات البرمجية التالية:

ج موضوعية

- (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];
    }
}

سريع

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
    }
  }




ios9