it-swarm.asia

تغيير حجم الخط لرؤوس قسم UITableView

هل يمكن لشخص ما أن يرشدني على أسهل طريقة لتغيير حجم الخط للنص في رأس قسم UITableView؟

لدي عناوين الأقسام المنفذة باستخدام الطريقة التالية:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

بعد ذلك ، أفهم كيفية تغيير ارتفاع رأس القسم بنجاح باستخدام هذه الطريقة:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

لدي خلايا UITableView بالسكان باستخدام هذه الطريقة:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

ومع ذلك ، فأنا عالق فيما يتعلق بكيفية زيادة حجم الخط فعليًا - أو بالنسبة لهذا الأمر نمط الخط - لنص رأس القسم؟

يمكن للشخص الرجاء المساعدة؟ شكر.

125
JRD8

لسوء الحظ ، قد تضطر إلى تجاوز هذا:

في الهدف ج:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

في سويفت:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

جرب شيئا مثل هذا:

في الهدف ج:

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

    UILabel *myLabel = [[UILabel alloc] init];
    myLabel.frame = CGRectMake(20, 8, 320, 20);
    myLabel.font = [UIFont boldSystemFontOfSize:18];
    myLabel.text = [self tableView:tableView titleForHeaderInSection:section];

    UIView *headerView = [[UIView alloc] init];
    [headerView addSubview:myLabel];

    return headerView;
}

في سويفت:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let myLabel = UILabel()
    myLabel.frame = CGRect(x: 20, y: 8, width: 320, height: 20)
    myLabel.font = UIFont.boldSystemFont(ofSize: 18)
    myLabel.text = self.tableView(tableView, titleForHeaderInSection: section)

    let headerView = UIView()
    headerView.addSubview(myLabel)

    return headerView
}
107
mosca1337

هناك طريقة أخرى للقيام بذلك تتمثل في الاستجابة إلى الأسلوب UITableViewDelegatewillDisplayHeaderView. طريقة العرض التي تم تمريرها هي في الواقع مثيل لـ UITableViewHeaderFooterView.

يقوم المثال أدناه بتغيير الخط ، كما يقوم أيضًا بتوسيط نص العنوان رأسيًا وأفقيًا داخل الخلية. لاحظ أنه يجب عليك أيضًا الرد على heightForHeaderInSection للحصول على أي تغييرات على ارتفاع رأسك في الاعتبار في تخطيط عرض الجدول. (أي إذا قررت تغيير ارتفاع الرأس في طريقة willDisplayHeaderView.)

يمكنك بعد ذلك الرد على طريقة titleForHeaderInSection لإعادة استخدام هذا الرأس المكون مع عناوين أقسام مختلفة.

ج موضوعية

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
    UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;

    header.textLabel.textColor = [UIColor redColor];
    header.textLabel.font = [UIFont boldSystemFontOfSize:18];
    CGRect headerFrame = header.frame;
    header.textLabel.frame = headerFrame;
    header.textLabel.textAlignment = NSTextAlignmentCenter;
}

سويفت 1.2

(ملاحظة: إذا كان جهاز التحكم في العرض هو سليل UITableViewController ، فستحتاج إلى الإعلان على أنه override func.)

override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) 
{
    let header:UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView

    header.textLabel.textColor = UIColor.redColor()
    header.textLabel.font = UIFont.boldSystemFontOfSize(18)
    header.textLabel.frame = header.frame
    header.textLabel.textAlignment = NSTextAlignment.Center
}

سويفت 3.0

يضمن هذا الرمز أيضًا عدم تعطل التطبيق إذا كانت طريقة عرض رأسك شيءًا غير UITableViewHeaderFooterView:

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    guard let header = view as? UITableViewHeaderFooterView else { return }
    header.textLabel?.textColor = UIColor.red
    header.textLabel?.font = UIFont.boldSystemFont(ofSize: 18)
    header.textLabel?.frame = header.frame
    header.textLabel?.textAlignment = .center
}
342
Mark Semsel

في حين أن إجابة mosca1337 هي الحل الصحيح ، كن حذراً مع هذه الطريقة. بالنسبة للرأس الذي يحتوي على نص أطول من سطر واحد ، سيكون عليك إجراء حسابات ارتفاع الرأس في tableView:heightForHeaderInSection: والتي قد تكون مرهقة.

الطريقة المفضلة كثيرًا هي استخدام واجهة برمجة تطبيقات المظهر:

[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setFont:[UIFont boldSystemFontOfSize:28]];

سيؤدي ذلك إلى تغيير الخط ، مع الاستمرار في مغادرة الجدول لإدارة المرتفعات نفسها.

للحصول على أفضل النتائج ، قم بإظهار فئة فرعية في الجدول وإضافته إلى سلسلة الاحتواء (في appearanceWhenContainedIn:) للتأكد من تغيير الخط فقط لطرق عرض الجدول المحددة.

92
Leo Natan

بالنسبة لنظام iOS 7 ، استخدم هذا ،


-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
    UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;

    header.textLabel.font = [UIFont boldSystemFontOfSize:10.0f];
    header.textLabel.textColor = [UIColor orangeColor];
}

هنا سويفت 3.0 نسخة مع تغيير حجم رأس

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let header = view as? UITableViewHeaderFooterView {
        header.textLabel!.font = UIFont.systemFont(ofSize: 24.0)
        header.textLabel!.textColor = UIColor.orange          
    }
}
23
Maria

سويفت 3:

أبسط طريقة لضبط فقط الحجم:

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

    let header = view as! UITableViewHeaderFooterView

    if let textlabel = header.textLabel {
        textlabel.font = textlabel.font.withSize(15)
    }
}
15
jeff-ziligy

سويفت 2.0 :

  1. استبدال رأس المقطع الافتراضي مع UILabel للتخصيص بالكامل.

قم بتنفيذ viewForHeaderInSection ، مثل ذلك:

  override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let sectionTitle: String = self.tableView(tableView, titleForHeaderInSection: section)!
    if sectionTitle == "" {
      return nil
    }

    let title: UILabel = UILabel()

    title.text = sectionTitle
    title.textColor = UIColor(red: 0.0, green: 0.54, blue: 0.0, alpha: 0.8)
    title.backgroundColor = UIColor.clearColor()
    title.font = UIFont.boldSystemFontOfSize(15)

    return title
  }
  1. تغيير الرأس الافتراضي (يحتفظ الافتراضي).

تطبيق willDisplayHeaderView ، مثل ذلك:

  override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

    if let view = view as? UITableViewHeaderFooterView {
      view.backgroundView?.backgroundColor = UIColor.blueColor()
      view.textLabel!.backgroundColor = UIColor.clearColor()
      view.textLabel!.textColor = UIColor.whiteColor()
      view.textLabel!.font = UIFont.boldSystemFontOfSize(15)
    }
  }

تذكر: إذا كنت تستخدم خلايا ثابتة ، فإن رأس القسم الأول يكون مبطنًا أعلى من رؤوس الأقسام الأخرى بسبب الجزء العلوي من UITableView ؛ لإصلاح هذا:

تطبيق heightForHeaderInSection ، مثل ذلك:

  override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

    return 30.0 // Or whatever height you want!
  }
8
Elliott Davies

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

الطريقة الأولى

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{
        UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
        header.backgroundView.backgroundColor = [UIColor darkGrayColor];
        header.textLabel.font=[UIFont fontWithName:@"Open Sans-Regular" size:12];
        [header.textLabel setTextColor:[UIColor whiteColor]];
    }

الطريقة الثانية

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 30)];
//    myLabel.frame = CGRectMake(20, 8, 320, 20);
    myLabel.font = [UIFont fontWithName:@"Open Sans-Regular" size:12];
    myLabel.text = [NSString stringWithFormat:@"   %@",[self tableView:FilterSearchTable titleForHeaderInSection:section]];

    myLabel.backgroundColor=[UIColor blueColor];
    myLabel.textColor=[UIColor whiteColor];
    UIView *headerView = [[UIView alloc] init];
    [headerView addSubview:myLabel];
    return headerView;
}
3
Anup Gupta

سويفت 4 إصدار ليو ناتان الجواب هو

UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).font = UIFont.boldSystemFont(ofSize: 28)

إذا كنت ترغب في تعيين خط مخصص يمكنك استخدامه

if let font = UIFont(name: "font-name", size: 12) {
    UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).font = font
}
2
Giorgio

سويفت 2:

كما طلب البروتوكول الاختياري ، فقط ضبط الحجم ، وليس ضبطه كخط غامق للنظام أو أيا كان:

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        if let headerView = view as? UITableViewHeaderFooterView, textLabel = headerView.textLabel {

            let newSize = CGFloat(16)
            let fontName = textLabel.font.fontName
            textLabel.font = UIFont(name: fontName, size: newSize)
        }
    }
1
Juan Boero