هل يمكنني فرض UITableView لإخفاء الفاصل بين الخلايا الفارغة؟[ينسخ]

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

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

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

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

لقد وجدت سؤال مماثل إلى حد ما هنا, ، لكن لا يمكنني استخدام مجموعة UITableView في تنفيذي

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

المحلول

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

نصائح أخرى

لنظام التشغيل iOS 7.* وiOS 6.1

أسهل طريقة هي ضبط tableFooterView ملكية:

- (void)viewDidLoad 
{
    [super viewDidLoad];

    // This will remove extra separators from tableview
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
}

للإصدارات السابقة

يمكنك إضافة هذا إلى TableViewController الخاص بك (سيعمل هذا مع أي عدد من الأقسام):

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
     // This will create a "invisible" footer
     return 0.01f;
 }

و إذا لم يكن كافيا, أضف الكود التالي أيضاً:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{        
    return [UIView new];

    // If you are not using ARC:
    // return [[UIView new] autorelease];
}

بالنسبة لسويفت:

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.tableFooterView = UIView()  // it's just 1 line, awesome!
}

باستخدام الرابط من دانيال، قمت بإنشاء امتداد لجعله أكثر قابلية للاستخدام:

//UITableViewController+Ext.m
- (void)hideEmptySeparators
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
    v.backgroundColor = [UIColor clearColor];
    [self.tableView setTableFooterView:v];
    [v release];
}

بعد بعض الاختبارات، اكتشفت أن الحجم يمكن أن يكون 0 وأنه يعمل أيضًا.لذلك لا يضيف نوعًا من الهامش في نهاية الجدول.لذا شكرًا wkw على هذا الاختراق.قررت نشر ذلك هنا لأنني لا أحب إعادة التوجيه.

سويفت إصدار

أسهل طريقة هي تعيين خاصية tableFooterView:

override func viewDidLoad() {
    super.viewDidLoad()
    // This will remove extra separators from tableview
    self.tableView.tableFooterView = UIView(frame: CGRectZero)
}

بالنسبة لسويفت:

self.tableView.tableFooterView = UIView(frame: CGRectZero)

إذا كنت تستخدم iOS 7 SDK، فهذا أمر بسيط للغاية.

فقط أضف هذا السطر في طريقة viewDidLoad الخاصة بك:

self.yourTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

إعداد الطاولة separatorStyle ل UITableViewCellSeparatorStyleNone (في الكود أو في IB) يجب أن تقوم بالخدعة.

أستخدم ما يلي:

UIView *view = [[UIView alloc] init];
myTableView.tableFooterView = view;
[view release];

القيام بذلك في viewDidLoad.ولكن يمكنك ضبطه في أي مكان.

ما يلي يعمل بشكل جيد للغاية بالنسبة لي لهذه المشكلة:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {

CGRect frame = [self.view frame];
frame.size.height =  frame.size.height - (kTableRowHeight * numberOfRowsInTable);

UIView *footerView = [[UIView alloc] initWithFrame:frame];
return footerView; }

حيث kTableRowHeight هو ارتفاع خلايا الصف و numberOfRowsInTable هو عدد الصفوف الموجودة في الجدول.

امل ان يساعد،

برينتون.

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