كيف يمكنني التمرير UITableView إلى القسم التي لا تحتوي على الصفوف ؟

StackOverflow https://stackoverflow.com/questions/159821

  •  03-07-2019
  •  | 
  •  

سؤال

في التطبيق أنا أعمل لدى عادي نمط UITableView التي يمكن أن تحتوي على قسم الصفوف التي تحتوي على صفر.كنت تريد أن تكون قادرة على التمرير إلى هذا القسم باستخدام scrollToRowAtIndexPath:atScrollPosition:الرسوم المتحركة:ولكن أحصل على خطأ عند محاولة انتقل إلى هذا القسم نظرا لعدم وجود صفوف الأطفال.

أبل تطبيق التقويم غير قادرة على القيام بذلك ، إذا نظرت في التقويم الخاص بك في عرض القائمة ، وليس هناك أي الأحداث في التقويم الخاص بك لهذا اليوم ، فارغة القسم يتم إدراجها لهذا اليوم و يمكنك التمرير باستخدام اليوم على زر في شريط الأدوات في الجزء السفلي من الشاشة.بقدر ما أستطيع أن أقول أن أبل قد تستخدم مخصصة UITableView ، أو أنهم باستخدام API الخاص...

الحل الوحيد الذي يمكنني أن أفكر في إدراج فارغة UITableCell في ذلك 0 بكسل عالية و انتقل إلى ذلك.لكنه فهم أن وجود خلايا ارتفاعات متفاوتة سيئة حقا بالنسبة التمرير الأداء.لا يزال سأحاول على كل حال, ربما ضرب الأداء لن يكون سيئا للغاية.

التحديث

حيث يبدو أن هناك أي حل إلى هذا ، لقد قدم تقرير الشوائب مع أبل.إذا كان هذا يؤثر عليك أيضا ملف نسخة مكررة من rdar://المشكلة/6263339 (فتح الرادار الرابط) إذا كنت تريد أن تحصل على هذا ثابت أسرع.

تحديث #2

لدي الكريم الحل لهذه المسألة ، نلقي نظرة على جوابي أدناه.

هل كانت مفيدة؟

المحلول

تحديث:يبدو أن هذا هو علة ثابتة في دائرة الرقابة الداخلية 3.0.يمكنك استخدام التالية NSIndexPath انتقل إلى قسم يحتوي على 0 الصفوف:

[NSIndexPath indexPathForRow:NSNotFound inSection:section]

سأترك بلدي الأصلي الحل هنا من أجل أي شخص لا يزال الحفاظ على المشروع باستخدام 2.x SDK.


وجدت لائق الحل:

CGRect sectionRect = [tableView rectForSection:indexOfSectionToScrollTo];
[tableView scrollRectToVisible:sectionRect animated:YES];

رمز أعلاه سوف انتقل tableview لذلك القسم المطلوب هو مرئي ولكن ليس بالضرورة في الجزء العلوي أو السفلي من المنطقة المرئية.إذا كنت تريد أن انتقل ذلك القسم هو في أعلى القيام بذلك:

CGRect sectionRect = [tableView rectForSection:indexOfSectionToScrollTo];
sectionRect.size.height = tableView.frame.size.height;
[tableView scrollRectToVisible:sectionRect animated:YES];

تعديل sectionRect على النحو المطلوب انتقل إلى القسم المطلوب إلى أسفل أو وسط المنطقة المرئية.

نصائح أخرى

هذا هو السؤال القديم, ولكن لا تزال أبل لم تقم بإضافة أي شيء يساعد أو إصلاح الخلل الحادث حيث قسم له أية صفوف.

بالنسبة لي, أنا حقا بحاجة إلى جعل قسم جديد انتقل إلى الوسط عند إضافة لذلك أنا الآن استخدام هذه التعليمة البرمجية:

if (rowCount > 0) {
    [self.tableView scrollToRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: sectionIndexForNewFolder] 
                          atScrollPosition: UITableViewScrollPositionMiddle
                                  animated: TRUE];
} else { 
    CGRect sectionRect = [self.tableView rectForSection: sectionIndexForNewFolder];
    // Try to get a full-height rect which is centred on the sectionRect
    // This produces a very similar effect to UITableViewScrollPositionMiddle.
    CGFloat extraHeightToAdd = sectionRect.size.height - self.tableView.frame.size.height;
    sectionRect.origin.y -= extraHeightToAdd * 0.5f;
    sectionRect.size.height += extraHeightToAdd;
    [self.tableView scrollRectToVisible:sectionRect animated:YES];
}

آمل أن تكونوا مثل ذلك - أنها تقوم على مايك أكرز' رمز كما ترى ولكن لا حساب التمرير إلى الوسط بدلا من الأعلى.شكرا مايك - أنت نجمة.

سريع النهج نفسه:

if rows > 0 {
    let indexPath = IndexPath(row: 0, section: section)
    self.tableView.setContentOffset(CGPoint.zero, animated: true)
    self.tableView.scrollToRow(at: indexPath, at: .top, animated: true)
}

else {
    let sectionRect : CGRect = tableView.rect(forSection: section)
    tableView.scrollRectToVisible(sectionRect, animated: true)
}

إذا قسم لم الصفوف استخدام هذا

let indexPath = IndexPath(row: NSNotFound, section: section)
tableView.scrollToRow(at: indexPath, at: .middle, animated: true)

أعتقد صف فارغ ربما هو السبيل الوحيد للذهاب إلى هناك.هل من الممكن إعادة تصميم واجهة المستخدم مثل أن "فارغة" الصف يمكن عرض شيء مفيد ؟

قلت في محاولة منه و انظر ماذا الأداء هو مثل.أنها جميلة تعطي تحذيرات حول استخدام شفافة الفرعية وجهات النظر في قائمة البنود, ولم أجد هذا يهم كل ذلك بكثير في التطبيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top