كيفية الحصول على حجم زر "الحذف" في UITableViewCell عند التمرير للحذف؟
-
06-07-2019 - |
سؤال
أقوم بإضافة تسمية التاريخ والوقت على يمين خلية الجدول.عندما تظهر ميزة السحب للحذف زر "حذف"، يجب أن تتحرك تسمية التاريخ والوقت إلى اليسار قليلاً.ولكن كيف يمكن الحصول على حجم زر "الحذف"؟
حاولت العثور عليه في cell.subviews لكنني فشلت.
المحلول
وليس لديك لمعرفة حجم الزر. بدلا من ذلك، استخدم حجم الممتلكات contentView
الخلية لحساب أحجام subviews. عندما الضرب فوق خلية، وUIKit التكيف مع حجم contentView
وندعو layoutSubviews
على الخلية وجوه. في فئة فرعية الخاص بك من UITableViewCell، الكتابة فوق طريقة layoutSubviews
وتعيين الأحجام المناسبة لsubviews.
RecipeTableViewCell.m من أبل iPhoneCoreDataRecipes نموذج التعليمات البرمجية.
نصائح أخرى
استخدم هذا الرمز في صفك خلية مخصصة
- (void)layoutSubviews {
[super layoutSubviews];
NSMutableArray *subviews = [self.subviews mutableCopy];
while (subviews.count > 0)
{
UIView *subV = subviews[0];
[subviews removeObjectAtIndex:0];
if ([NSStringFromClass([subV class])isEqualToString:@"UITableViewCellDeleteConfirmationView"])
{
UIView *deleteButtonView = (UIView *)[self.subviews objectAtIndex:0];
CGFloat deleteBtnHeight=deleteButtonView.frame.size.height;//here you get the height
}
}
}
وحجم يعدل لتتناسب مع النص الوارد. راجع التعليمات البرمجية التالية:
- (NSString *)tableView:(UITableView *)tableView
titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
return @"Dynamic width!";
}
ومقابل
- (NSString *)tableView:(UITableView *)tableView
titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
return @"⏎";
}
إذا لم تقم بتجاوز طريقة LayoutSubviews في خلية عرض الجدول المخصصة الخاصة بك، فإن طريقتي هي:
- قم بإنشاء العرض الفرعي المخصص الخاص بك، وقم بتعيين الإطار بناءً على contentView.bounds.
- تعيين
autoresizingMask
لUIViewAutoresizingFlexibleWidth
. - أضف طريقة العرض الفرعية المخصصة الخاصة بك إلى ContentView للخلية.
- تكوين الخلية ل التحرير
الآن، عندما تقوم بالتمرير على الخلية، يظهر زر الحذف ويتم تغيير حجم العرض تلقائيًا باستخدام contentView.
وزر الحذف هو 63x33.