هل يمكنني فرض UITableView لإخفاء الفاصل بين الخلايا الفارغة؟[ينسخ]
-
06-07-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
عند استخدام النمط العادي 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 هو عدد الصفوف الموجودة في الجدول.
امل ان يساعد،
برينتون.