ইউআইটিএবলভি বিভাগ বিভাগের শিরোনামগুলির জন্য ফন্টের আকার পরিবর্তন করা


139

কোনও ইউআইটিএবলভি বিভাগ বিভাগ শিরোনামে পাঠ্যের জন্য ফন্টের আকার পরিবর্তন করার সহজ উপায় সম্পর্কে দয়া করে আমাকে কেউ নির্দেশ দিতে পারেন?

আমি নিম্নলিখিত পদ্ধতিটি ব্যবহার করে বিভাগের শিরোনামগুলি প্রয়োগ করেছি:

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

তারপরে, আমি বুঝতে পারি কীভাবে সফলভাবে এই পদ্ধতিটি ব্যবহার করে বিভাগের শিরোনামের উচ্চতা পরিবর্তন করতে হবে:

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

আমি এই পদ্ধতিটি ব্যবহার করে ইউআইটিএবল ভিউ সেলগুলি পপুলেট করেছি:

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

যাইহোক, আমি বিভাগের শিরোনামের পাঠ্যের ফন্টের আকারটি - বা সে ক্ষেত্রে ফন্ট শৈলীটি কীভাবে বাড়িয়ে তুলব তা সম্পর্কে আমি আটকে আছি?

কেউ দয়া করে সহায়তা করতে পারেন? ধন্যবাদ।


উত্তর:


118

দুর্ভাগ্যক্রমে, আপনার এটিকে ওভাররাইড করতে হতে পারে:

উদ্দেশ্য-সি তে:

- (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
}

1
ধন্যবাদ. এটি পুরোপুরি কাজ করে। অনেক প্রশংসিত.
জেআরডি

5
যদিও এটি একটি সঠিক সমাধান, এই পদ্ধতির সাথে সাবধানতা অবলম্বন করুন। এক লাইনের চেয়ে দীর্ঘ শিরোনামের জন্য, আপনাকে শিরোনামের উচ্চতার গণনা সম্পাদন tableView:heightForHeaderInSection:করতে হবে যাতে জটিল হতে পারে।
লিও নাটান

3
এটি চেষ্টা করে এবং এটি যখন কাজ করে আপনি যদি টেবিলটি উপরে স্ক্রোল করেন তবে শিরোনাম লেবেল স্ক্রিনে থাকে এবং ঘরগুলি ওভারলে করে। :(
প্লাজমা

2
@trss আমি মনে করি আপনি এটি দেখতে পাবেন এটি প্রত্যাশিত আচরণ নয়। আমি এখানে থাকা শিরোনাম বিভাগ সম্পর্কে বলছি না, কেবলমাত্র লেবেল, এবং এর সুপারগুলি কোষের উপর চাপিয়ে দেওয়ার সাথে সাথে এটি প্রয়োগ করে এটি একটি বাস্তব জগাখিচুড়ি দেখাচ্ছে। আমি এটি অর্জনের জন্য আরও ভাল উপায় খুঁজে পেয়েছি এবং এটি আবার খুঁজে পেলে এটি আবার পোস্ট করব।
প্লাজমা

1
@ Mosca1337 অন্য ভিউ তৈরি করার দরকার নেই, আপনি প্রকৃত 'ইউআইটিএবল ভিউহাইডারফুটারভিউ' প্রদর্শিত হচ্ছে এবং প্যারামিটারগুলি সামঞ্জস্য করতে পারেন।
জুয়ান বোয়েরো

368

এটি করার আরেকটি উপায় হ'ল UITableViewDelegateপদ্ধতিটির প্রতিক্রিয়া willDisplayHeaderView। পাস করা ভিউ আসলে একটি এর উদাহরণ 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;
}

সুইফট ১.২

(দ্রষ্টব্য: যদি আপনার ভিউ কন্ট্রোলার কোনও এর বংশধর 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

এই কোডটিও নিশ্চিত করে যে আপনার হেডার ভিউটি যদি কোনও ইউআইটিবেবল ভিউহাইডারফুটারভিউ ছাড়া অন্য কিছু হয় তবে অ্যাপটি ক্রাশ না হবে:

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
}

3
এই পদ্ধতিটি আমার জন্য
প্লাজমা

6
আমি দেখেছি সেরা উত্তর।
ফটম্যান

2
উপক্লাসের (অন্যথায় মতামত যুক্তকরণের মতো) অন্য কোনও কারণ নেই বলে ধরে নিয়ে তথ্যকে সামঞ্জস্য করার এটি হ'ল "যথাযথ" উপায়। অতিরিক্তভাবে, এই পদ্ধতিটি ডায়নামিক টাইপের জন্য শিরোনাম পাঠ্য আপডেট করতে ব্যবহার করা যেতে পারে। সহজভাবে ব্যবহার করুন: header.textLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];এবং / অথবা header.detailTextLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];প্রয়োজনীয় অন্যান্য পদক্ষেপের সাথে (এখানে দেখুন: captechconsulting.com/blog/john-szumski/… )
লায়েন

3
এটি শিরোনামের দৃশ্যের আকার পরিবর্তন করে না, সুতরাং আপনার ফন্ট যদি বৃহত্তর বা উল্লেখযোগ্যভাবে আলাদা হয় যেমন জাফফিনো (কেন জিজ্ঞাসা করবেন না), এটি পাঠ্য কেটে ফেলবে। আপনি যদি নিজের থেকে আকারটি গণনা করতে চান তবে এটি একটি গোলমাল এবং আপনার এটি করা উচিত নয়।
লিও নাটান

@ কোকোপ্রাইস্ট আমার বিটা সংস্করণে ক্রাশ হচ্ছে না o (জিএম বীজ 2)
প্যাট্রিক বাসুত

96

যদিও Mosca1337 এর উত্তরটি সঠিক সমাধান, সেই পদ্ধতির সাথে সতর্ক থাকুন। এক লাইনের চেয়ে দীর্ঘ পাঠ্য সহ শিরোনামের জন্য, আপনাকে শিরোনামের উচ্চতার গণনা সম্পাদন tableView:heightForHeaderInSection:করতে হবে যাতে জটিল হতে পারে।

উপস্থিতি এপিআই ব্যবহার করা একটি খুব পছন্দের পদ্ধতি:

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

উচ্চতাগুলি নিজেই পরিচালনা করতে টেবিলটি রেখে যাওয়ার পরে এটি ফন্টটি পরিবর্তন করবে।

অনুকূল ফলাফলের জন্য, সারণী দর্শনটি সাবক্লাস করুন এবং appearanceWhenContainedIn:এটি নির্দিষ্ট টেবিল দর্শনের জন্য হরফটি পরিবর্তিত হয়েছে তা নিশ্চিত করার জন্য এটি কন্টেন্টমেন্ট চেইনে (ইন ) যুক্ত করুন।


1
যদি সাবক্লাসিং হয় তবে আপনি যে কোনও উপায়ে - tableView:viewForHeaderInSection:ডানদিক থেকে কাস্টম ভিউটি ফিরিয়ে দিবেন ? যে ক্ষেত্রে ফন্টটি ঠিক সেখানে সেট করা যেতে পারে। @ মোছা ১৩৩37 এর সমাধান যাইহোক এটিই করে।
trss

1
হাহাহা, আচ্ছা আমি গতকালের পরে খুব উজ্জ্বল। টেবিল ভিউ সাবক্লাস করুন এবং এটি ধারক তালিকায় যুক্ত করুন। ;-)
লিও নাটান

2
এই সমাধানটি রিয়েল পাদলেখ / শিরোলেখের আকার গণনা করে অনেকগুলি বাগের কারণ ঘটায়। কাস্টম ফন্ট সেট আপ করার সময় শিরোনামগুলি কাটা হয়ে গেলে আমি কয়েকটি উদাহরণ দেখাতে পারি।
কাস-কাদ

5
সুইফট 3 :UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).font = UIFont.boldSystemFont(ofSize: 28)
এরিক হজগিনস

3
এটি আইওএস ১১-এ ফন্টের উপযুক্ত করতে লেবেলের সঠিক আকার পরিবর্তন করতে পারে না Also এছাড়াও, ভিউগুলি লোড করার পরে উপরে স্ক্রল করে উপরে নামিয়ে এগুলি ডিফল্ট ফন্টে পুনরায় সেট করে।
নিকডনক

25

আইওএস 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          
    }
}

6
নতুন ফন্টের সাথে মানিয়ে নেওয়ার জন্য এটি শিরোনামের ভিউটিকে আকার দেবে না।
লিও নাটান

@ লিওনাটান কীভাবে আমরা নতুন ফন্টের সাথে মানিয়ে নিতে শিরোলেখের দৃশ্যকে আকার দিতে পারি - এটি কি এই পদ্ধতিতে করা যায়?
SAHM

আমি স্পষ্ট করে বলতে চেয়েছিলাম যে আমি আপনার উপরের উত্তরটি দেখেছি তবে যখনই কোনও ব্যবহারকারী নির্বাচিত ফন্ট (অ্যাক্সেসযোগ্যতা) নির্দিষ্ট আকারের চেয়ে বেশি হয়ে থাকে (তাই সমস্ত সময় নয়) তখনই আমি আকারটি সীমাবদ্ধ করতে ফন্টটি পরিবর্তন করতে চাই। আমি বিশ্বাস করি আমাকে উইলডিস্পেহাইডারভিউতে ফন্টটি চেক করা এবং সম্ভাব্যভাবে পরিবর্তন করা দরকার, সুতরাং ফন্টটি পরিবর্তিত হলে আমি কীভাবে দেখার উচ্চতাটি পুনরায় গণনা করতে পারি?
SAHM

19

সুইফট 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)
    }
}

এটি আমি সন্ধান করছি সবচেয়ে সহজ উপায়।
রায়ান

দ্রুত কাজ 4! "ওভাররাইড ফানক .." ভুলে যাবেন না
ম্যাটভে

8

সুইফট ২.০ :

  1. সম্পূর্ণ কাস্টমাইজযোগ্য ইউআইএলবেল দিয়ে ডিফল্ট বিভাগের শিরোনামটি প্রতিস্থাপন করুন।

ViewEHeaderInSication যেমন বাস্তবায়িত করুন:

  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. ডিফল্ট শিরোনাম পরিবর্তন করুন (ডিফল্ট ধরে রাখে)।

উইডটি ডিসপ্লেইহাইডারভিউ এর মতো প্রয়োগ করুন:

  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)
    }
  }

মনে রাখবেন: আপনি যদি স্ট্যাটিক সেল ব্যবহার করছেন, ইউআইটিএবলভিউ শীর্ষের কারণে প্রথম বিভাগের শিরোনামটি অন্যান্য বিভাগের শিরোনামের চেয়ে বেশি প্যাড করা হবে; এটি ঠিক করতে:

উচ্চতার জন্য প্রয়োগ করুন হাইডারআইনসেকশন, এর মতো:

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

    return 30.0 // Or whatever height you want!
  }

4

সুইফট 4 লিও Natan সংস্করণ উত্তর হয়

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
}

দুর্ভাগ্যক্রমে এটি ফ্রেমের আকার পরিবর্তন করে না।
নিকডনক

3

এই পদ্ধতির সাহায্যে আপনি ফন্টের আকার, ফন্ট শৈলী এবং শিরোনামের পটভূমিও সেট করতে পারেন । এই জন্য 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;
}

1

সুইফট 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)
        }
    }

0

এটি সুইফট 5 সহ আমার সমাধান।

শিরোনাম বিভাগের দর্শনটি সম্পূর্ণরূপে নিয়ন্ত্রণ করতে, আপনার পূর্ববর্তী পোস্টটি যেমন দেখায় তেমনভাবে আপনার নিয়ামকটিতে টেবিলভিউ (: ভিউফোর্ডহাইডারইনসেকশন: :) পদ্ধতিটি ব্যবহার করতে হবে। যাইহোক, আরও একটি পদক্ষেপ রয়েছে: কর্মক্ষমতা উন্নত করতে, অ্যাপল প্রতিবার একটি নতুন দৃষ্টিভঙ্গি তৈরি না করে পুনরায় ব্যবহারের সারণী ঘরের মতো হেডার ভিউটি পুনরায় ব্যবহার করার পরামর্শ দেয়। এটি পদ্ধতির টেবিলভিউ.ডেকিউরিউজযোগ্য হিজারফুটারভিউ (আইডেন্টিফায়ার সহ:) by তবে আমার সমস্যাটি হ'ল একবার আপনি এই পুনরায় ব্যবহারের ফাংশনটি ব্যবহার শুরু করলে, ফন্টটি প্রত্যাশার মতো কাজ করবে না। অন্যান্য জিনিস যেমন রঙ, প্রান্তিককরণ সমস্ত সূক্ষ্ম তবে কেবল ফন্ট। কিছু আলোচনা আছে তবে আমি এটিকে নীচের মত করে কাজ করেছি।

সমস্যাটি টেবিল ভিউ.ডেকিউরউজ্যুয়েবল হেইডারফুটারভিউ (আইডেন্টিফায়ার সহ :) টেবিল ভিউ.ডেকুইনরউইসসেল (:) এর মতো নয় যা সর্বদা একটি সেল দেয়। প্রাক্তন কেউ যদি না পাওয়া যায় তবে তা শূন্য করে দেবে। এমনকি যদি এটি পুনরায় ব্যবহারের শিরোনাম দর্শনটি ফেরত দেয় তবে এটি আপনার আসল শ্রেণির ধরণ নয়, তবে একটি ইউআইটিএবলহিডারফুটারভিউ। সুতরাং আপনাকে রায় করতে হবে এবং নিজের কোড অনুসারে কাজ করতে হবে। মূলত, এটি যদি শূন্য হয় তবে একেবারে নতুন শিরোনামের ভিউ পান। শূন্য না হলে, কাস্ট করতে বাধ্য করুন যাতে আপনি নিয়ন্ত্রণ করতে পারেন।

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let reuse_header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "yourHeaderID")
        if (reuse_header == nil) {
            let new_sec_header = YourTableHeaderViewClass(reuseIdentifier:"yourHeaderID")
            new_section_header.label.text="yourHeaderString"
            //do whatever to set color. alignment, etc to the label view property
            //note: the label property here should be your custom label view. Not the build-in labelView. This way you have total control.
            return new_section_header
        }
        else {
            let new_section_header = reuse_section_header as! yourTableHeaderViewClass
            new_sec_header.label.text="yourHeaderString"
            //do whatever color, alignment, etc to the label property
            return new_sec_header}

    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.