পুরো আইওএস অ্যাপের জন্য একটি ডিফল্ট ফন্ট সেট করবেন?


155

আমার অ্যাপ্লিকেশন, লেবেলগুলি, পাঠ্য দর্শন ইত্যাদিতে পাঠ্য প্রদর্শিত প্রতিটি কিছুর জন্য আমি একটি কাস্টম ফন্ট ব্যবহার করতে চাই have

পুরো অ্যাপ্লিকেশনটির জন্য ডিফল্ট ফন্ট (ডিফল্টরূপে সিস্টেমফন্ট ব্যবহার করে লেবেল) সেট করার কোনও উপায় আছে কি?


7
ব্যাপকভাবে এই হতাশার দিকে নজর রেখে। আমরা সত্যিই সর্বাধিক সহজ জিনিসটি খুঁজে পেয়েছি প্রতিটি নিয়ন্ত্রণের জন্য কেবল একটি (তুচ্ছ) নতুন বর্গ তৈরি করা। ইউআইবাটন এর জন্য, এসজেবাটন তৈরি করুন। InitWithFrame এবং initWithCode উভয়ই ওভাররাইড করতে ভুলবেন না। প্রতিটি নিয়ন্ত্রণের জন্য (ইউআইবাটন ইত্যাদি বলুন) রঙগুলি বা আপনার পছন্দসই সেট করুন। সাবধানতার সাথে ইনট কোডে আকারটি (অর্থাত্ স্টোরিবোর্ডে সেট করা আকার হবে) চয়ন করুন এবং তারপরে (আপনার পছন্দ অনুসারে) সেই আকারটি ব্যবহার করুন (এবং সেট করুন, বলুন, ফন্ট, রঙ - যাই হোক না কেন)। এটি কোডের কয়েকটি মাত্র লাইন, অবিশ্বাস্যভাবে পরিচ্ছন্ন এবং দীর্ঘকালীন সময়ে আপনাকে বিশাল সময় সাশ্রয় দেয়।
ফ্যাটি

@ জো ব্লো আপনার অনুসন্ধানগুলি পোস্ট করার জন্য ধন্যবাদ - আমি নিজেই এই উত্তরটির সন্ধান করতে ব্যয় করতে চলেছি
জেজে ।

@ জেজে- ঠিক আছে। আপনি অবশ্যই ব্যবহার করতে হবে খুব ভুলে যাবেন নাIBDesignable এই দিনগুলি । আশা করি এটা সাহায্য করবে. এছাড়াও এই আকর্ষণীয় QA বিবেচনা করুন: stackoverflow.com/a/38000466/294884
ফ্যাটি

উত্তর:


158

ইউআইএআইপিয়ারেন্স প্রক্সি ব্যবহার করে আইওএস 5 এ এটি সম্ভব হবে বলে মনে হচ্ছে।

 [[UILabel appearance] setFont:[UIFont fontWithName:@"YourFontName" size:17.0]];

এটি আপনার কাস্টম ফন্টটি আপনার অ্যাপ্লিকেশনের সমস্ত ইউআইএলবেলের জন্য যা কিছু হ'ল তা হ'ল সেট করে। প্রতিটি নিয়ন্ত্রণের জন্য আপনাকে এটি পুনরুক্ত করতে হবে (ইউআইবাটন, ইউআইএলবেল, ইত্যাদি)।

মনে রাখবেন আপনার ইউআইএআইপিএফফন্টসের মানটি আপনার তথ্য.পুলিস্টে রাখা এবং আপনি যে ফন্টটি অন্তর্ভুক্ত করছেন তার নাম অন্তর্ভুক্ত করতে হবে।


46
উত্তরের জন্য ধন্যবাদ. আমি এটি কাজ করতে সক্ষম হয়েছি। আপনি কি জানেন যে ফন্টের আকার নির্দিষ্ট না করে ফন্ট নির্দিষ্ট করার কোনও উপায় আছে কিনা? আমার অ্যাপে আমার এমন লেবেল রয়েছে যা একই ফন্টের আকারটি ভাগ করে না।
ব্র্যান্ডন

23
আমি প্রতিটি দৃষ্টান্তের বিন্দু আকারকে ছাড়াই এটি করতে পারি?
মাইকেল ফরেস্ট

17
setFont:পদ্ধতি
আনন্দ

12
@ এবং আপনি কি এ সম্পর্কে নিশ্চিত? আমি এটিকে অবচয় হিসাবে চিহ্নিত হিসাবে দেখছি না UILabel। এটির জন্য অবচয় করা হয়েছে UIButtonতবে এটি titleLabelসম্পত্তির জন্য হরফ ফন্টটি ব্যবহার করে যা একটি UILabel, তাই কেবল উপস্থিতি প্রক্সি সহ ফন্টটি সেট UILabelকরা ঠিক হবে।
অ্যাড্রিয়ান শনিগ

6
@ এবং এটি ইউআইএলবেলের জন্য অবহেলিত নয়।
অ্যালিস্টার স্টুয়ার্ট

118

সুইফট 5

ফেবিও অলিভিরার উত্তরের ভিত্তিতে ( https://stackoverflow.com/a/23042694/2082851 ), আমি আমার নিজের দ্রুতগতি 4 করি।

সংক্ষেপে, এই এক্সটেনশনটি এক্সচেঞ্জ ডিফল্ট ফাংশন init(coder:), systemFont(ofSize:), boldSystemFont(ofSize:), italicSystemFont(ofSize:)আমার কাস্টম পদ্ধতি।

মনে রাখবেন এটি সম্পূর্ণরূপে বাস্তবায়িত হচ্ছে না, তবে আপনি আমার বাস্তবায়নের ভিত্তিতে আরও পদ্ধতির বিনিময় করতে পারেন।

import UIKit

struct AppFontName {
    static let regular = "CourierNewPSMT"
    static let bold = "CourierNewPS-BoldMT"
    static let italic = "CourierNewPS-ItalicMT"
}

extension UIFontDescriptor.AttributeName {
    static let nsctFontUIUsage = UIFontDescriptor.AttributeName(rawValue: "NSCTFontUIUsageAttribute")
}

extension UIFont {
    static var isOverrided: Bool = false

    @objc class func mySystemFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.regular, size: size)!
    }

    @objc class func myBoldSystemFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.bold, size: size)!
    }

    @objc class func myItalicSystemFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.italic, size: size)!
    }

    @objc convenience init(myCoder aDecoder: NSCoder) {
        guard
            let fontDescriptor = aDecoder.decodeObject(forKey: "UIFontDescriptor") as? UIFontDescriptor,
            let fontAttribute = fontDescriptor.fontAttributes[.nsctFontUIUsage] as? String else {
                self.init(myCoder: aDecoder)
                return
        }
        var fontName = ""
        switch fontAttribute {
        case "CTFontRegularUsage":
            fontName = AppFontName.regular
        case "CTFontEmphasizedUsage", "CTFontBoldUsage":
            fontName = AppFontName.bold
        case "CTFontObliqueUsage":
            fontName = AppFontName.italic
        default:
            fontName = AppFontName.regular
        }
        self.init(name: fontName, size: fontDescriptor.pointSize)!
    }

    class func overrideInitialize() {
        guard self == UIFont.self, !isOverrided else { return }

        // Avoid method swizzling run twice and revert to original initialize function
        isOverrided = true

        if let systemFontMethod = class_getClassMethod(self, #selector(systemFont(ofSize:))),
            let mySystemFontMethod = class_getClassMethod(self, #selector(mySystemFont(ofSize:))) {
            method_exchangeImplementations(systemFontMethod, mySystemFontMethod)
        }

        if let boldSystemFontMethod = class_getClassMethod(self, #selector(boldSystemFont(ofSize:))),
            let myBoldSystemFontMethod = class_getClassMethod(self, #selector(myBoldSystemFont(ofSize:))) {
            method_exchangeImplementations(boldSystemFontMethod, myBoldSystemFontMethod)
        }

        if let italicSystemFontMethod = class_getClassMethod(self, #selector(italicSystemFont(ofSize:))),
            let myItalicSystemFontMethod = class_getClassMethod(self, #selector(myItalicSystemFont(ofSize:))) {
            method_exchangeImplementations(italicSystemFontMethod, myItalicSystemFontMethod)
        }

        if let initCoderMethod = class_getInstanceMethod(self, #selector(UIFontDescriptor.init(coder:))), // Trick to get over the lack of UIFont.init(coder:))
            let myInitCoderMethod = class_getInstanceMethod(self, #selector(UIFont.init(myCoder:))) {
            method_exchangeImplementations(initCoderMethod, myInitCoderMethod)
        }
    }
}


class AppDelegate: UIResponder, UIApplicationDelegate {
    // Avoid warning of Swift
    // Method 'initialize()' defines Objective-C class method 'initialize', which is not guaranteed to be invoked by Swift and will be disallowed in future versions
    override init() {
        super.init()
        UIFont.overrideInitialize()
    }
    ...
}

2
সর্বোত্তম উত্তর!! স্বয়ংক্রিয়ভাবে সিস্টেম ফন্টটি ওভাররাইড করে, উজ্জ্বল
ক্যাপ্প

2
যদি কারও "এনএসসিটিফন্টইউইউজেজএট্রিবিউট" লাইনটি সমস্যা হয়: if let fontAttribute = fontDescriptor.fontAttributes[.nsctFontUIUsage] as? String {আমার জন্য কৌশলটি করেছেন।
জ্ঞান

1
UILabelটেক্সট-স্টাইল (বোল্ড, শিরোনাম, শিরোনাম, ইত্যাদি) সেট করে এমনগুলির সাথে কাজ করে বলে মনে হচ্ছে না ... কেবলমাত্র একটি নির্দিষ্ট আকার এবং সিস্টেম ফন্ট সেট রয়েছে এমন ফন্টের সাথে কাজ করে। @ নাহুং ৯৯
এভিরান

1
এটি কিছু সিস্টেম ইউআই ফন্টগুলিও স্যুইচ করে। উদাহরণস্বরূপ, কীবোর্ড পরামর্শ তালিকা এবং ক্রিয়া পত্রক। জানেন না এর ফলে অ্যাপল অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করবে কিনা
হেনরি এইচ মিয়াও

1
এই উত্তরটি পোস্ট হওয়ার পরে এক বছর হয়ে গেছে। কারও কাছে এ অর্জনের আরও "দেশীয়" অ্যাপল উপায় আছে?
গ্রেগ হিলস্টন

75

এছাড়াও আরও একটি সমাধান রয়েছে যা সিস্টেমফন্টকে ওভাররাইড করা হবে।

শুধু একটি বিভাগ তৈরি করুন

UIFont + + SystemFontOverride.h

#import <UIKit/UIKit.h>

@interface UIFont (SystemFontOverride)
@end

UIFont + + SystemFontOverride.m

@implementation UIFont (SystemFontOverride)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

+ (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize {
    return [UIFont fontWithName:@"fontName" size:fontSize];
}

+ (UIFont *)systemFontOfSize:(CGFloat)fontSize {
    return [UIFont fontWithName:@"fontName" size:fontSize];
}

#pragma clang diagnostic pop

@end

এটি ডিফল্ট বাস্তবায়ন প্রতিস্থাপন করবে এবং বেশিরভাগ ইউআইসিন্ট্রোলস সিস্টেমফন্ট ব্যবহার করবে।


1
এটি কি আপেলের নির্দেশিকাগুলির মধ্যে রয়েছে?
রামবাতিনো

এটি আরও একটি হ্যাক। আমি এই হ্যাকটির সাথে আমার অ্যাপ্লিকেশন নিবন্ধ যুক্ত করিনি, কারণ এটি কোনও ব্যক্তিগত পদ্ধতি ব্যবহার করছে না। আপনি যদি আরও দৃust়
Hugues BR

2
্রফ. অ্যাপল কেবল চান না যে আপনি অনিবন্ধিত ফাংশন ব্যবহার করুন। আপনাকে পাবলিক যে পদ্ধতিগুলি "সুইজল" করার অনুমতি দেওয়া হয়েছে।
এমএক্সসিএল

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

1
অন্যরা যেমন উল্লেখ করেছে, এই সমাধানটি বেশিরভাগ সময় কার্যকর হওয়ার সম্ভাবনা রয়েছে তবুও প্রযুক্তিগতভাবে অপরিজ্ঞাত আচরণের সম্ভাবনা প্রবর্তন করছে। আপনি যদি এটিকে ঝুঁকিপূর্ণ মনে করেন না তবে পদ্ধতি সুইজলিং আরও ভাল বিকল্প হতে পারে। : উত্তর এখানে swizzling মাধ্যমে একই সমাধান প্রদান stackoverflow.com/questions/19542942/...
নাথন Hosselton

63

আপনি যদি সুইফ্ট ব্যবহার করছেন, আপনি একটি ইউআইএলবেল এক্সটেনশন তৈরি করতে পারেন:

extension UILabel {

    @objc var substituteFontName : String {
        get { return self.font.fontName }
        set { self.font = UIFont(name: newValue, size: self.font.pointSize) }
    }

}

এবং তারপরে আপনি যেখানে আপনার উপস্থিতি প্রক্সিং করছেন:

UILabel.appearance().substituteFontName = applicationFont

UI_APPEARANCE_SELECTORনামের সাথে একটি সম্পত্তি ব্যবহার করে সমতুল্য অবজেক্টিভ-সি কোড রয়েছে substituteFontName

যোগ

যে ক্ষেত্রে আপনি আলাদাভাবে সাহসী এবং নিয়মিত ফন্ট সেট করতে চান:

extension UILabel {

    @objc var substituteFontName : String {
        get { return self.font.fontName }
        set { 
            if self.font.fontName.range(of:"Medium") == nil { 
                self.font = UIFont(name: newValue, size: self.font.pointSize)
            }
        }
    }

    @objc var substituteFontNameBold : String {
        get { return self.font.fontName }
        set { 
            if self.font.fontName.range(of:"Medium") != nil { 
                self.font = UIFont(name: newValue, size: self.font.pointSize)
            }
        }
    }
}

তারপরে আপনার ইউআইএ উপস্থিতি প্রক্সিগুলির জন্য:

UILabel.appearance().substituteFontName = applicationFont
UILabel.appearance().substituteFontNameBold = applicationFontBold

দ্রষ্টব্য: যদি আপনি সন্ধান করছেন যে সাহসী প্রতিস্থাপন কাজ করছে না, এটি সম্ভব ডিফল্ট ফন্টের নামটিতে "মাঝারি" থাকে না। প্রয়োজন মতো অন্য ম্যাচের জন্য সেই স্ট্রিংটি স্যুইচ করুন (নীচের মন্তব্যে ম্যাসনকে ধন্যবাদ)।


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

দুঃখিত, আমি বোঝাতে চাইছিলাম .কেনসেল লেবেলগুলি সাধারণত সাহসী হত এবং ডিফল্ট সাধারণত নিয়মিত ওজন হয়।
ম্যাসন জি। ঝুইটি

2
@ মেসনজি.জুইটি এই ক্ষেত্রে, আমি সম্ভবত UILabelসাহসের জন্য অতিরিক্ত ফন্টের নাম নিতে এক্সটেনশনটি সেট আপ করব । তারপরে set"বোল্ড" ফন্টের নামটিতে আছে কিনা তা পরীক্ষা করে দেখুন এবং একটি ক্ষেত্রে সেটটি উপেক্ষা করুন এবং অন্যটিতে এটি ব্যবহার করুন। আমি সম্পাদনা করব এবং একটি উদাহরণ যুক্ত করব।
স্যান্ডি চ্যাপম্যান

@ স্যান্ডি চ্যাপম্যান ধন্যবাদ! আমি এই নতুন কৌশলটি চেষ্টা করছি, এবং এটি বোধগম্য, তবে এটি আমার পক্ষে কাজ করছে বলে মনে হয় না। আমি আইওএস 8.3 সিমুলেটারে গিলসানস এবং গিলসানস-বোল্ড ব্যবহার করছি। আপনি কি এই কৌশলটি পরীক্ষা করেছেন?
ম্যাসন জি। ঝুইটি

2
@ স্যান্ডি চ্যাপম্যান আমি বুঝতে পারলাম কি হচ্ছে। আইওএস 8-র ডিফল্ট ফন্টগুলি হেলভেটিকানিউইন্টারফেস-নিয়মিত বা (সাহসের জন্য) হেলভেটিকানিউইন্টারফেস-মিডিয়ামপি 4 হিসাবে থাকে। সুতরাং "বোল্ড" অনুসন্ধান কখনও কোনও কিছুর সাথে মেলে না। আমি এটিকে পরিবর্তন করেছি rangeOfString("Medium")এবং এটি কাজ করেছে।
ম্যাসন জি। ঝুইটি

23

হিউগস বিআর এর উত্তর থেকে বিকাশ করা হয়েছে তবে পদ্ধতি সুইজলিংয়ের সাহায্যে আমি এমন একটি সমাধান নিয়ে এসেছি যা সফলভাবে আমার অ্যাপ্লিকেশনটিতে সমস্ত ফন্টকে একটি পছন্দসই ফন্টে পরিবর্তন করছে।

ডায়নামিক প্রকারের সাথে একটি দৃষ্টিভঙ্গি আপনার আইওএস 7 এ কীভাবে সন্ধান করা উচিত তা হ'ল নিম্নলিখিত সমাধানটি ডায়নামিক টাইপ ব্যবহার করছে না।


মন্তব্য:

  • নীচের কোডটি তার উপস্থাপিত রাজ্যে কখনও অ্যাপলের অনুমোদনে জমা দেওয়া হয়নি;
  • এর একটি সংক্ষিপ্ত সংস্করণ রয়েছে যা অ্যাপল জমা দেওয়ার পাশ করেছে, এটি ছাড়াই - initWithCoder: ওভাররাইড । তবে এটি সমস্ত মামলা কভার করবে না;
  • নিম্নলিখিত কোডটি আমার ক্লাসে উপস্থিত রয়েছে আমার অ্যাপ্লিকেশনটির স্টাইলটি সেট করতে যা আমার অ্যাপডেলিগেট শ্রেণীর অন্তর্ভুক্ত রয়েছে এইভাবে সর্বত্র এবং সমস্ত ইউআইএফন্টের দৃষ্টান্তগুলিতে উপলব্ধ;
  • পরিবর্তনগুলি আরও বেশি দৃশ্যমান করতে আমি এখানে জাফফিনো ব্যবহার করছি;
  • এই কোডটিতে আপনি যে কোনও উন্নতি পেতে পারেন তা স্বাগত।

এই সমাধানটি চূড়ান্ত ফলাফল অর্জন করতে দুটি পৃথক পদ্ধতি ব্যবহার করে। প্রথমটি ইউআইএফন্ট শ্রেণীর পদ্ধতিগুলিকে ওভাররাইড করে+ systemFontWithSize: এবং আমার বিকল্পগুলি ব্যবহার সাথে অনুরূপ (এখানে আমি প্রতিস্থাপনটি সফল হয়েছিল কিনা সন্দেহের জন্য "জ্যাপফিনো" ব্যবহার করি)।

অন্য পদ্ধতিটি হ'ল - initWithCoder:ইউআইএফন্টে CTFontRegularUsageআমার বিকল্পগুলির সাথে সম্পর্কিত এবং এর অনুরূপ কোনও প্রতিস্থাপনের জন্য পদ্ধতিটিকে ওভাররাইড করা । এই শেষ পদ্ধতিটি প্রয়োজনীয় ছিল কারণ আমি খুঁজে পেয়েছি যে UILabelএনআইবি ফাইলগুলিতে এনকোড করা অবজেক্টগুলি + systemFontWithSize:তাদের সিস্টেমের ফন্ট পেতে পদ্ধতিগুলি পরীক্ষা করে না এবং পরিবর্তে সেগুলিকে UICTFontDescriptorবস্তু হিসাবে এনকোড করে । আমি ওভাররাইড করার চেষ্টা করেছি - awakeAfterUsingCoder:তবে কোনওভাবে এটি আমার স্টোরিবোর্ডের প্রতিটি এনকোডযুক্ত বস্তুর জন্য কল করা এবং ক্রাশ ঘটাচ্ছে। ওভাররাইডিং - awakeFromNibআমাকে NSCoderঅবজেক্টটি পড়তে দেয় না ।

#import <objc/runtime.h>

NSString *const FORegularFontName = @"Zapfino";
NSString *const FOBoldFontName = @"Zapfino";
NSString *const FOItalicFontName = @"Zapfino";

#pragma mark - UIFont category
@implementation UIFont (CustomFonts)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
+ (void)replaceClassSelector:(SEL)originalSelector withSelector:(SEL)modifiedSelector {
    Method originalMethod = class_getClassMethod(self, originalSelector);
    Method modifiedMethod = class_getClassMethod(self, modifiedSelector);
    method_exchangeImplementations(originalMethod, modifiedMethod);
}

+ (void)replaceInstanceSelector:(SEL)originalSelector withSelector:(SEL)modifiedSelector {
    Method originalDecoderMethod = class_getInstanceMethod(self, originalSelector);
    Method modifiedDecoderMethod = class_getInstanceMethod(self, modifiedSelector);
    method_exchangeImplementations(originalDecoderMethod, modifiedDecoderMethod);
}

+ (UIFont *)regularFontWithSize:(CGFloat)size
{
    return [UIFont fontWithName:FORegularFontName size:size];
}

+ (UIFont *)boldFontWithSize:(CGFloat)size
{
    return [UIFont fontWithName:FOBoldFontName size:size];
}

+ (UIFont *)italicFontOfSize:(CGFloat)fontSize
{
    return [UIFont fontWithName:FOItalicFontName size:fontSize];
}

- (id)initCustomWithCoder:(NSCoder *)aDecoder {
    BOOL result = [aDecoder containsValueForKey:@"UIFontDescriptor"];

    if (result) {
        UIFontDescriptor *descriptor = [aDecoder decodeObjectForKey:@"UIFontDescriptor"];

        NSString *fontName;
        if ([descriptor.fontAttributes[@"NSCTFontUIUsageAttribute"] isEqualToString:@"CTFontRegularUsage"]) {
            fontName = FORegularFontName;
        }
        else if ([descriptor.fontAttributes[@"NSCTFontUIUsageAttribute"] isEqualToString:@"CTFontEmphasizedUsage"]) {
            fontName = FOBoldFontName;
        }
        else if ([descriptor.fontAttributes[@"NSCTFontUIUsageAttribute"] isEqualToString:@"CTFontObliqueUsage"]) {
            fontName = FOItalicFontName;
        }
        else {
            fontName = descriptor.fontAttributes[@"NSFontNameAttribute"];
        }

        return [UIFont fontWithName:fontName size:descriptor.pointSize];
    }

    self = [self initCustomWithCoder:aDecoder];

    return self;
}

+ (void)load
{
    [self replaceClassSelector:@selector(systemFontOfSize:) withSelector:@selector(regularFontWithSize:)];
    [self replaceClassSelector:@selector(boldSystemFontOfSize:) withSelector:@selector(boldFontWithSize:)];
    [self replaceClassSelector:@selector(italicSystemFontOfSize:) withSelector:@selector(italicFontOfSize:)];

    [self replaceInstanceSelector:@selector(initWithCoder:) withSelector:@selector(initCustomWithCoder:)];
}
#pragma clang diagnostic pop

@end

আপনি কিভাবে iOS6 এই বাস্তবায়ন ব্যবহার UIFontDescriptor আছে আত যা
Utku ইলদিরিম

প্রদত্ত ফন্টটি সাহসী বা তির্যক কিনা তা পরীক্ষা করার জন্য আমি ডিকোডার কী "ইউআইএফন্টট্রেটস" ব্যবহার করেছি এবং এটিকে আমার নিজস্ব পরিবর্তনের সাথে প্রতিস্থাপন করেছি। এই টুকরোটি থেকে এখানে পেয়েছেন gist.github.com/Daij-Djan/5046612
ফ্যাবিও অলিভিরা 13

উত্তরের জন্য ধন্যবাদ আমি আপাতত অন্য একটি সমাধান ব্যবহার করেছি। আমার যখন আবার প্রয়োজন হবে তখন আমি এটি যাচাই করে নেব :)
উত্কু ইল্ডারিয়াম

2
@ FábioOliveira ধন্যবাদ, এটি একটি মোহন মত কাজ করে! আপনাকে আরও একটি বিষয় যা আপনাকে শিরোনামে # ইম্পোর্ট <জেজক / রানটাইম.h> লাগাতে হবে, অন্যথায় আপনি 'মেথড' শ্রেণিটি ব্যবহার করে ত্রুটি পাবেন (ত্রুটিটি আমি
এক্সকোড in এ পেয়েছি

কোনও কারণে, আইওএস 8-তে, মডেলগুলি ( UIAlertController) ফন্ট পরিবর্তন করে না।
র্যান্ডমব্লু

13

স্যান্ডি চ্যাপম্যানের উত্তরটি সম্পূর্ণ করতে , এখানে উদ্দেশ্য-সি এর একটি সমাধান রয়েছে ( আপনি যে কোনও জায়গায় পরিবর্তন করতে চান এই বিভাগটি দিনUILabel Appearance ):

@implementation UILabel (FontOverride)
- (void)setSubstituteFontName:(NSString *)name UI_APPEARANCE_SELECTOR {
    self.font = [UIFont fontWithName:name size:self.font.pointSize];
}
@end

ইন্টারফেস ফাইলটি, এই অ্যাপ্লিকেশনটি আপনার অ্যাপের প্রতিনিধিদের মতো জায়গা থেকে পরে প্রকাশ্যে ব্যবহারের জন্য ঘোষণা করা উচিত:

@interface UILabel (FontOverride)
  - (void)setSubstituteFontName:(NSString *)name UI_APPEARANCE_SELECTOR;
@end

তারপরে, আপনি এর Appearanceসাথে পরিবর্তন করতে পারেন :

[[UILabel appearance] setSubstituteFontName:@"SourceSansPro-Light"];

1
হাই, আপনি কি "কোথাও" বোঝাতে চান, সেই কোডটি প্রতিটি ভিউ কন্ট্রোলারে যুক্ত করতে হবে এবং নিয়ামকটিতে প্রতিটি ইউআইএলবেল ব্যবহার করা উচিত, যেখানে আপনি ফন্টটি পরিবর্তন করতে চান?
জুলু

না, আপনাকে এই কোডটি একবারে , আপনার প্রকল্পের যে কোনও জায়গায় রাখতে হবে; উদাহরণস্বরূপ আপনার appdelegate
ড্যামিয়েন দেবিন

1
@ ডামিয়েনডাবিন আমি সাহসের জন্য বোল্ড ফন্ট ব্যবহার করতে চাই তবে এটি হালকা হয়ে যায়। কোন পথে?
জিশান

আসলে, এটি কাজ করে, তবে এটি "বিভাগ" বা "এক্সটেনশন" হওয়া উচিত? : পার্থক্য এখানে ব্যাখ্যা stackoverflow.com/questions/7136124/...
দারিয়াবস Miliauskas

4

SWIFT 3.0 এবং সুইফট সতর্কতার জন্য কমেন্টস

আপনি লাইনে সতর্কতা বার্তা সরাতে পারেন:

let initCoderMethod = class_getInstanceMethod(self, Selector("initWithCoder:"))

এর সাথে প্রতিস্থাপন করে:

let initCoderMethod = class_getInstanceMethod(self, #selector(UIFontDescriptor.init(coder:)))

হাঃ হাঃ হাঃ. আমি জানতাম না যে সুইফট এটি ব্যবহারের অনুমতি দেয়। বিটিডব্লিউ, আমি এটি উপরের উত্তরে আপডেট করব। ধন্যবাদ @ ইউকোট!
nahung89

4

সুইফট 5 এর জন্য

উপরের সমস্ত উত্তর সঠিক তবে আমি ডিভাইসের আকার অনুযায়ী সামান্য ভিন্ন উপায়ে করেছি । এখানে, এটিএফন্টম্যানেজার ক্লাসে, আমি ডিফল্ট ফন্টের আকার তৈরি করেছি যা ক্লাসের শীর্ষে ডিফল্টফন্টসাইজ হিসাবে সংজ্ঞায়িত করা হয় , এটি আইফোন প্লাসের ফন্ট আকার এবং আপনি আপনার প্রয়োজন অনুযায়ী পরিবর্তন করতে পারেন।

class ATFontManager: UIFont{
    
    class func setFont( _ iPhone7PlusFontSize: CGFloat? = nil,andFontName fontN : String = FontName.helveticaNeue) -> UIFont{
        
        let defaultFontSize : CGFloat = 16
        
        switch ATDeviceDetector().screenType {
            
        case .iPhone4:
            if let fontSize = iPhone7PlusFontSize{
                return UIFont(name: fontN, size: fontSize - 5)!
            }
            return UIFont(name: fontN, size: defaultFontSize - 5)!
            
        case .iPhone5:
            if let fontSize = iPhone7PlusFontSize{
                return UIFont(name: fontN, size: fontSize - 3)!
            }
            return UIFont(name: fontN, size: defaultFontSize - 3)!
            
        case .iPhone6AndIphone7, .iPhoneUnknownSmallSize:
            if let fontSize = iPhone7PlusFontSize{
                return UIFont(name: fontN, size: fontSize - 2)!
            }
            return UIFont(name: fontN, size: defaultFontSize - 2)!
            
        case .iPhone6PAndIPhone7P, .iPhoneUnknownBigSize:
            
            return UIFont(name: fontN, size: iPhone7PlusFontSize ?? defaultFontSize)!
        case .iPhoneX, .iPhoneXsMax:
            
            return UIFont(name: fontN, size: iPhone7PlusFontSize ?? defaultFontSize)!
          
        case .iPadMini:
            if let fontSize = iPhone7PlusFontSize{
                return UIFont(name: fontN, size: fontSize + 2)!
            }
            return UIFont(name: fontN, size: defaultFontSize + 2)!
            
        case .iPadPro10Inch:
            if let fontSize = iPhone7PlusFontSize{
                return UIFont(name: fontN, size: fontSize + 4)!
            }
            return UIFont(name: fontN, size: defaultFontSize + 4)!
            
        case .iPadPro:
            if let fontSize = iPhone7PlusFontSize{
                return UIFont(name: fontN, size: fontSize + 6)!
            }
            return UIFont(name: fontN, size: defaultFontSize + 6)!
            
        case .iPadUnknownSmallSize:
            
            return UIFont(name: fontN, size: defaultFontSize + 2)!
            
        case .iPadUnknownBigSize:
            
            return UIFont(name: fontN, size: defaultFontSize + 4)!
            
        default:
            
            return UIFont(name: fontN, size: iPhone7PlusFontSize ?? 16)!
        }
    }
}
     

আমি নির্দিষ্ট ফন্টের নাম যুক্ত করেছি, আরও জন্য আপনি ফন্টের নাম যুক্ত করতে পারেন এবং এখানে টাইপ করতে পারেন।

   enum FontName : String {
        case HelveticaNeue = "HelveticaNeue"
        case HelveticaNeueUltraLight = "HelveticaNeue-UltraLight"
        case HelveticaNeueBold = "HelveticaNeue-Bold"
        case HelveticaNeueBoldItalic = "HelveticaNeue-BoldItalic"
        case HelveticaNeueMedium = "HelveticaNeue-Medium"
        case AvenirBlack = "Avenir-Black"
        case ArialBoldMT = "Arial-BoldMT"
        case HoeflerTextBlack = "HoeflerText-Black"
        case AMCAPEternal = "AMCAPEternal"
    }

এই শ্রেণিটি ডিভাইস অনুযায়ী উপযুক্ত ফন্টের আকার সরবরাহ করতে ডিভাইস সনাক্তকারীকে বোঝায়।

class ATDeviceDetector {
    
    var iPhone: Bool {
        
        return UIDevice().userInterfaceIdiom == .phone
    }
    
    var ipad : Bool{
        
        return UIDevice().userInterfaceIdiom == .pad
    }
    
    let isRetina = UIScreen.main.scale >= 2.0
    
    
    enum ScreenType: String {
        
        case iPhone4
        case iPhone5
        case iPhone6AndIphone7
        case iPhone6PAndIPhone7P
        case iPhoneX
        
        case iPadMini
        case iPadPro
        case iPadPro10Inch
        
        case iPhoneOrIPadSmallSizeUnknown
        case iPadUnknown
        case unknown
    }
    
    
    struct ScreenSize{
        
        static let SCREEN_WIDTH         = UIScreen.main.bounds.size.width
        static let SCREEN_HEIGHT        = UIScreen.main.bounds.size.height
        static let SCREEN_MAX_LENGTH    = max(ScreenSize.SCREEN_WIDTH,ScreenSize.SCREEN_HEIGHT)
        static let SCREEN_MIN_LENGTH    = min(ScreenSize.SCREEN_WIDTH,ScreenSize.SCREEN_HEIGHT)
    }
    
    
    var screenType: ScreenType {
        
        switch ScreenSize.SCREEN_MAX_LENGTH {
            
        case 0..<568.0:
            return .iPhone4
        case 568.0:
            return .iPhone5
        case 667.0:
            return .iPhone6AndIphone7
        case 736.0:
            return .iPhone6PAndIPhone7P
        case 812.0:
            return .iPhoneX
        case 568.0..<812.0:
            return .iPhoneOrIPadSmallSizeUnknown
        case 1112.0:
            return .iPadPro10Inch
        case 1024.0:
            return .iPadMini
        case 1366.0:
            return .iPadPro
        case 812.0..<1366.0:
            return .iPadUnknown
        default:
            return .unknown
        }
    }
}

ব্যবহারবিধি. আশা করি এটি সাহায্য করবে।

//for default 
label.font = ATFontManager.setFont()

//if you want to provide as your demand. Here **iPhone7PlusFontSize** variable is denoted as font size for *iphone 7plus and iphone 6 plus*, and it **ATFontManager** class automatically handle.
label.font = ATFontManager.setFont(iPhone7PlusFontSize: 15, andFontName: FontName.HelveticaNeue.rawValue)

3

এই সমাধানগুলির কোনওটিই অ্যাপ্লিকেশন জুড়ে সর্বজনীনভাবে কাজ করে না। এক্সকোডে ফন্টগুলি পরিচালনা করতে আমি যে জিনিসটি খুঁজে পেয়েছি তা হ'ল স্টোরিবোর্ডটি সোর্স কোড হিসাবে (ফাইল নেভিগেটরে কন্ট্রোল-ক্লিক স্টোরিবোর্ড> "হিসাবে" খুলুন ">" উত্স ") খুলছে এবং তারপরে একটি সন্ধান এবং প্রতিস্থাপন করছে doing


3

হরফ টাইপ সর্বদা কোড এবং নিব / স্টোরিবোর্ডে সেট করা থাকে।

কোডটির জন্য হুগেস বিআর মতোই বলেছেন , ক্যাটাগরিতে এটি করা সমস্যার সমাধান করতে পারে।

নিব / স্টোরিবোর্ডের জন্য, আমরা সুইটলিং জাগ্রত পদ্ধতি থেকে ফন্টের ধরন পরিবর্তন করতে পারি কারণ নিব / স্টোরিবোর্ড থেকে ইউআই উপাদানটি সর্বদা স্ক্রিনে শো করার আগে এটি কল করে।

আমি মনে করি আপনি দিকগুলি জানেন know এটি মেথ সুইজলিংয়ের উপর ভিত্তি করে এওপি প্রোগ্রামিংয়ের জন্য একটি গ্রন্থাগার। আমরা এটি বাস্তবায়নের জন্য ইউআইএলবেল, ইউআইবাটন, ইউআইটিেক্সটভিউয়ের জন্য ক্যাটাগরী তৈরি করি।

UILabel:

#import "UILabel+OverrideBaseFont.h"
#import "Aspects.h"

@implementation UILabel (OverrideBaseFont)

+ (void)load {
    [[self class]aspect_hookSelector:@selector(awakeFromNib) withOptions:AspectPositionAfter usingBlock:^(id<AspectInfo> aspectInfo) {
        UILabel* instance = [aspectInfo instance];
        UIFont* font = [UIFont fontWithName:@"HelveticaNeue-light" size:instance.font.pointSize];
        instance.font = font;
    }error:nil];
}

@end

UIButton:

#import "UIButton+OverrideBaseFont.h"
#import "Aspects.h"

@implementation UIButton (OverrideBaseFont)

+ (void)load {
    [[self class]aspect_hookSelector:@selector(awakeFromNib) withOptions:AspectPositionAfter usingBlock:^(id<AspectInfo> aspectInfo) {
        UIButton* instance = [aspectInfo instance];
        UILabel* label = instance.titleLabel;
        UIFont* font = [UIFont fontWithName:@"HelveticaNeue-light" size:label.font.pointSize];
        instance.titleLabel.font = font;
    }error:nil];
}

@end

UITextField:

#import "UITextField+OverrideBaseFont.h"
#import "Aspects.h"

@implementation UITextField (OverrideBaseFont)

+ (void)load {
    [[self class]aspect_hookSelector:@selector(awakeFromNib) withOptions:AspectPositionAfter usingBlock:^(id<AspectInfo> aspectInfo) {
        UITextField* instance = [aspectInfo instance];
        UIFont* font = [UIFont fontWithName:@"HelveticaNeue-light" size:instance.font.pointSize];
        instance.font = font;
    }error:nil];
}

@end

UITextView:

#import "UITextView+OverrideBaseFont.h"
#import "Aspects.h"

@implementation UITextView (OverrideBaseFont)

+ (void)load {
    [[self class]aspect_hookSelector:@selector(awakeFromNib) withOptions:AspectPositionAfter usingBlock:^(id<AspectInfo> aspectInfo) {
        UITextView* instance = [aspectInfo instance];
        UIFont* font = [UIFont fontWithName:@"HelveticaNeue-light" size:instance.font.pointSize];
        instance.font = font;
    }error:nil];
}

@end

এগুলি হ'ল, আপনি হেলভেটিকা ​​নিউইউ-লাইটকে আপনার ফন্টের নাম সহ ম্যাক্রোতে পরিবর্তন করতে পারবেন।


3

আমি সুইফট 4-এর জন্য টাইপোগ্রাফির নিজস্ব রূপান্তর তৈরি করেছি কয়েকটি পোস্ট পর্যালোচনা করে , এটি বেশিরভাগ ক্ষেত্রেই কভার করে যেমন:

1 ম প্রকল্পের কাঠামোতে এবং .plist ফাইলটিতে ফন্ট যুক্ত করুন (একই নাম সহ):

<key>UIAppFonts</key>
<array>
    <string>Typo-Light.ttf</string>
    <string>Typo-Regular.ttf</string>
    <string>Typo-Semibold.ttf</string>
    <string>Typo-LightItalic.ttf</string>
</array>

তারপর

struct Resources {

    struct Fonts {
        //struct is extended in Fonts
    }
}

extension Resources.Fonts {

    enum Weight: String {
        case light = "Typo-Light"
        case regular = "Typo-Regular"
        case semibold = "Typo-Semibold"
        case italic = "Typo-LightItalic"
    }
}

extension UIFontDescriptor.AttributeName {
    static let nsctFontUIUsage = UIFontDescriptor.AttributeName(rawValue: "NSCTFontUIUsageAttribute")
}

extension UIFont {

    @objc class func mySystemFont(ofSize: CGFloat, weight: UIFont.Weight) -> UIFont {
        switch weight {
        case .semibold, .bold, .heavy, .black:
            return UIFont(name: Resources.Fonts.Weight.semibold.rawValue, size: ofSize)!

        case .medium, .regular:
            return UIFont(name: Resources.Fonts.Weight.regular.rawValue, size: ofSize)!

        default:
            return UIFont(name: Resources.Fonts.Weight.light.rawValue, size: ofSize)!
        }
    }

    @objc class func mySystemFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: Resources.Fonts.Weight.light.rawValue, size: size)!
    }

    @objc class func myBoldSystemFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: Resources.Fonts.Weight.semibold.rawValue, size: size)!
    }

    @objc class func myItalicSystemFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: Resources.Fonts.Weight.italic.rawValue, size: size)!
    }

    @objc convenience init(myCoder aDecoder: NSCoder) {
        guard
            let fontDescriptor = aDecoder.decodeObject(forKey: "UIFontDescriptor") as? UIFontDescriptor,
            let fontAttribute = fontDescriptor.fontAttributes[.nsctFontUIUsage] as? String else {
                self.init(myCoder: aDecoder)
                return
        }
        var fontName = ""
        switch fontAttribute {
        case "CTFontRegularUsage", "CTFontMediumUsage":
            fontName = Resources.Fonts.Weight.regular.rawValue
        case "CTFontEmphasizedUsage", "CTFontBoldUsage", "CTFontSemiboldUsage","CTFontHeavyUsage", "CTFontBlackUsage":
            fontName = Resources.Fonts.Weight.semibold.rawValue
        case "CTFontObliqueUsage":
            fontName = Resources.Fonts.Weight.italic.rawValue
        default:
            fontName = Resources.Fonts.Weight.light.rawValue
        }
        self.init(name: fontName, size: fontDescriptor.pointSize)!
    }

    class func overrideDefaultTypography() {
        guard self == UIFont.self else { return }

        if let systemFontMethodWithWeight = class_getClassMethod(self, #selector(systemFont(ofSize: weight:))),
            let mySystemFontMethodWithWeight = class_getClassMethod(self, #selector(mySystemFont(ofSize: weight:))) {
            method_exchangeImplementations(systemFontMethodWithWeight, mySystemFontMethodWithWeight)
        }

        if let systemFontMethod = class_getClassMethod(self, #selector(systemFont(ofSize:))),
            let mySystemFontMethod = class_getClassMethod(self, #selector(mySystemFont(ofSize:))) {
            method_exchangeImplementations(systemFontMethod, mySystemFontMethod)
        }

        if let boldSystemFontMethod = class_getClassMethod(self, #selector(boldSystemFont(ofSize:))),
            let myBoldSystemFontMethod = class_getClassMethod(self, #selector(myBoldSystemFont(ofSize:))) {
            method_exchangeImplementations(boldSystemFontMethod, myBoldSystemFontMethod)
        }

        if let italicSystemFontMethod = class_getClassMethod(self, #selector(italicSystemFont(ofSize:))),
            let myItalicSystemFontMethod = class_getClassMethod(self, #selector(myItalicSystemFont(ofSize:))) {
            method_exchangeImplementations(italicSystemFontMethod, myItalicSystemFontMethod)
        }

        if let initCoderMethod = class_getInstanceMethod(self, #selector(UIFontDescriptor.init(coder:))),
            let myInitCoderMethod = class_getInstanceMethod(self, #selector(UIFont.init(myCoder:))) {
            method_exchangeImplementations(initCoderMethod, myInitCoderMethod)
        }
    }
}

শেষের Appdelegateমতো পরবর্তী পদ্ধতিতে তৈরি পদ্ধতিতে কল করুন :

class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {

        UIFont.overrideDefaultTypography()
        return true
    }
}

@ শেশনাথ আপনি কি আমাদের আরও ক্র্যাশের তথ্য দিতে পারবেন?
জাভিয়ের আমোর পেনাস

1
দুঃখিত ভুল আমার পক্ষ থেকে ছিল, ফন্ট তথ্য.পিস্টে তালিকাভুক্ত করা হয়নি
শেশে নাথ

@ মিধুনপ আপনি আরও স্পষ্ট করে বলতে পারেন যাতে এটি আপনার পক্ষে কাজ করে না ?. এটি গা bold় টাইপফেসের সাথে আমার পক্ষে ভাল কাজ করে।
জাভিয়ের আমোর পেনাস

2

সম্ভবত এটি নয়, আপনার নিজের নিয়ন্ত্রণের ফন্টটি সম্ভবত নিজেই থাকবে, তবে আপনি যেখানে ফন্টের প্রকারগুলি পাবেন সেটিকে কেন্দ্রীকরণের মাধ্যমে প্রক্রিয়াটিকে আরও সহজ করে তুলতে পারেন, উদাহরণস্বরূপ অ্যাপের প্রতিনিধি বা অন্য কোনও সাধারণ শ্রেণীর কাছে এমন পদ্ধতি রয়েছে যা ফেরত দেয় হরফ এবং হরফ সেট করার জন্য যে কোনও কিছু প্রয়োজন হয় সেই পদ্ধতিটিকে কল করতে পারে, এটি আপনাকে যদি আপনার ফন্ট পরিবর্তন করার প্রয়োজন হয় তবে আপনি ফন্টগুলি যে কোনও স্থানে সেট করার পরিবর্তে এটি একটি জায়গায় পরিবর্তন করতে পারবেন ... অন্য বিকল্পের সাবক্লাসগুলি তৈরি করা যেতে পারে আপনার ইউআই এলিমেন্টস যা ফন্টটি স্বয়ংক্রিয়ভাবে সেট করবে, তবে এটি ওভারকিল হতে পারে ..


রেকর্ডটির জন্য, আমি এটিই করেছি, তবে @ র্যান্ডালকে এই প্রতিনিধিটির দরকার ছিল এবং একটি ভাল উত্তর সরবরাহ করেছিল। আমার কেবল 5.0 এরও কম সমর্থন করা দরকার
স্যাম জারম্যান

4
আপনি যা করেছেন তার সাথে আমি একমত নই। আপনার প্রশ্নটি আইফোন- sdk-4.0-এ ট্যাগ করা হলে আপনি নির্বাচিত উত্তরটি বৈধ নয়।
পাওলো ক্যাসারেটো

@ সাম জারম্যান, নীচে র‌্যান্ডালের উত্তর সঠিক - আপনি কি ভবিষ্যতের দর্শকদের জন্য সেভাবে চিহ্নিত করতে পারেন?
বিল

1

NUI হ'ল ইউআইএআইপিএয়ারেন্স প্রক্সিটির বিকল্প। এটি আপনাকে আপনার অ্যাপ্লিকেশন জুড়ে প্রচুর পরিমাণে ইউআই উপাদান টাইপের ফন্ট (এবং অন্যান্য অনেকগুলি বৈশিষ্ট্য) নিয়ন্ত্রণ করে দেয় কেবল স্টাইল শীটটি পরিবর্তন করে, যা একাধিক অ্যাপ্লিকেশন জুড়ে পুনরায় ব্যবহার করা যেতে পারে।

NUILabelআপনার লেবেলে ক্লাস যুক্ত করার পরে , আপনি সহজেই স্টাইল শীটে তাদের ফন্টটি নিয়ন্ত্রণ করতে পারেন:

LabelFontName    String    Helvetica

আপনার যদি বিভিন্ন ফন্টের আকারের লেবেল থাকে তবে আপনি তাদের মাপগুলি NUI এর লেবেল, লার্জবেবল এবং ছোট-ছোট ক্লাবগুলি ব্যবহার করে বা এমনকি দ্রুত নিজের ক্লাস তৈরি করতে পারেন।


1

দ্রুত এই ধরণের ফন্ট শ্রেণীর মতো ব্যবহার করছি। ফন্ট এক্সটেনশন ক্লাস ব্যবহার করে।

enum FontName: String {

  case regular      = "Roboto-Regular"

}

//MARK: - Set Font Size
enum FontSize: CGFloat {
    case size = 10

}
extension UIFont {

    //MARK: - Bold Font
  class var regularFont10: UIFont {
        return UIFont(name: FontName.regular.rawValue, size:FontSize.size.rawValue )!
    }
}

0

অ্যাপডেলিগেটের পুট কোডটির ভিতরে Xamarin.iOS এর FinishedLaunching()জন্য: -

UILabel.Appearance.Font= UIFont.FromName("Lato-Regular", 14);

পুরো অ্যাপ্লিকেশনটির জন্য হরফ সেট করুন এবং UIAppFontsতথ্য.পিস্টে ' ' কী যুক্ত করুন, পাথটি আপনার ফন্ট ফাইলটি .टीটিএফ যেখানে রয়েছে সেই পথটি হওয়া উচিত me আমার জন্য এটি আমার প্রকল্পের 'ফন্ট' ফোল্ডারের অভ্যন্তরে ছিল।

<key>UIAppFonts</key>
    <array>
        <string>fonts/Lato-Regular.ttf</string>
    </array>

0

@ র্যান্ডাল উল্লিখিত হিসাবে আইওএস 5.0+ UIApperanceপ্রক্সি আরও পড়ুন শ্রেণীর সমস্ত দৃষ্টান্তের চেহারাটি কাস্টমাইজ করতে ব্যবহার করা যেতে পারে ।

এক্সকোডস স্বয়ংক্রিয়ভাবে সম্পূর্ণ উপলব্ধ বৈশিষ্ট্যগুলি সমস্ত দেখায় না এবং একটি ত্রুটি ফেলে দিতে পারে তবে আপনি কেবল এটি টাইপ করতে পারেন এবং এটি সংকলন করবে।

UILabel.apperance().font = UIFont.systemFont(ofSize: 17, weight: .regular)

-1

আমরা পিতা-মাতার ভিউ কন্ট্রোলার এবং চাইল্ড ভিউ কন্ট্রোলার (উত্তরাধিকার) ব্যবহার করে সুইফট-এক্সকোড 7.2 এও অর্জন করেছি।

ফাইল - নতুন - কোকো টাচ ক্লাস - প্যারেন্টভিউকন্ট্রোলার।

    import UIKit
    import Foundation

    class ParentViewController: UIViewController {

        var appUIColor:UIColor = UIColor.redColor()
        var appFont:UIFont = UIFont(name: "Copperplate", size: 20)!

        override func viewDidLoad() {
            super.viewDidLoad()
        }
        func addStatusBar()
        {
            let view = UIView(frame:
                CGRect(x: 0.0, y: 0.0, width: UIScreen.mainScreen().bounds.size.width, height: 20.0)
            )
            view.backgroundColor = appUIColor
            self.view.addSubview(view)
        }
    }    

শিশুকে দেখার নিয়ন্ত্রক করুন এবং স্টোরিবোর্ড ভিসির সাথে সংযুক্ত করুন, একটি পাঠ্য লেবেল যুক্ত করুন।

    import UIKit

    class FontTestController: ParentViewController {
        @IBOutlet var testLabel: UILabel!

        override func viewDidLoad() {
            super.viewDidLoad()
            testLabel.font =  appFont
            testLabel.textColor = appUIColor
        }

অথবা একটি কাস্টম ইউআইএলবেল ক্লাস (সাব শ্রেণিবদ্ধকরণ পদ্ধতি) তৈরি করুন এবং এর সাথে প্রয়োজনীয় লেবেল সংযুক্ত করুন।

import Foundation
import UIKit

class CustomFontLabel: UILabel {
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        backgroundColor = ParentViewController().appUIColor
        font = ParentViewController().appFont
        textColor = UIColor.blackColor()
    }
}

দ্রষ্টব্য: প্যারেন্ট ভিসিতে ঘোষিত ফন্ট এবং রঙ কাস্টমফন্টলবেলে প্রয়োগ করা হয়। সুবিধাটি হ'ল আমরা পিতা বা ভিসিতে কিছু সাধারণ পরিবর্তনের সাথে ইউইলবেল / যে কোনও ভিউয়ের বৈশিষ্ট্যগুলি একসাথে পরিবর্তন করতে পারি।

2) সাব ভিউগুলির জন্য 'লুপিং ইউআইভিউ'র জন্য। এটি শুধুমাত্র একটি নির্দিষ্ট ভিসির উপর কাজ করে।

    override func viewWillLayoutSubviews() {
            for view in self.view.subviews  {
                if view.isKindOfClass(UITextField) {
                UITextField.appearance().font =  UIFont(name: "Copperplate", size: 20)
                }
                if view.isKindOfClass(UILabel) {
                    UILabel.appearance().font =  UIFont(name: "Copperplate", size: 20)    
                }               
            }       
        }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.