এক্সকোডে কাস্টম ফন্ট সাইজিং 6 ​​আকারের ক্লাসগুলি কাস্টম ফন্টগুলির সাথে সঠিকভাবে কাজ করছে না


104

Xcode 6 একটি নতুন বৈশিষ্ট্য যেখানে রয়েছে ফন্ট এবং ফন্টের মাপ মধ্যে UILabel, UITextFieldএবং UIButtonস্বয়ংক্রিয়ভাবে বর্তমান ডিভাইস কনফিগারেশন আকার বর্গ উপর ভিত্তি করে নির্ধারণ করা যাবে, ডান স্টোরিবোর্ড হবে। উদাহরণস্বরূপ, আপনি UILabel"যে কোনও প্রস্থ, কমপ্যাক্ট উচ্চতা" (যেমন ল্যান্ডস্কেপের আইফোনগুলিতে) কনফিগারেশন এবং "নিয়মিত প্রস্থ, নিয়মিত উচ্চতা" কনফিগারেশনগুলিতে (যেমন আইপ্যাডগুলিতে ) ফন্ট সাইজ 12 ব্যবহার করতে সেট করতে পারেন । আরো তথ্য এখানে পাওয়া যায়:

developer.apple.com/size_class

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

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

আমি একাধিক পৃথক কাস্টম ফন্ট চেষ্টা করেছি এবং এগুলির কোনওটির জন্য এটি কাজ করে বলে মনে হয় না, তবে আমি পরিবর্তে "সিস্টেম" ব্যবহার করি তবে এটি সর্বদা কার্যকর হয়।

যাইহোক, এক্সকোড 6 এ অন্য কেউ এই সমস্যাটি দেখেছেন ?

এটি আইওএস 8, এক্সকোড বা অন্য কোনও ক্ষেত্রে বাগ কিনা তা সম্পর্কে কোনও ধারণা

আমি কি ভুল করছি?

আমি যেমন বলেছি, কেবলমাত্র একমাত্র কাজটি হ'ল আমি হ'ল প্রায় তিনটি সংস্করণ আইওএস-এর জন্য ফন্টকে প্রোগ্রাম্যাটিকভাবে সেট করা চালিয়ে যাচ্ছি কারণ এটি কাজ করে না।

তবে আমি যদি এই বৈশিষ্ট্যটি কাস্টম ফন্টগুলির সাথে কাজ করতে পারি তবে আমি এটি ব্যবহার করতে সক্ষম হতে চাই। সিস্টেম ফন্ট ব্যবহার করা আমাদের ডিজাইনের জন্য গ্রহণযোগ্য নয়।


অতিরিক্ত তথ্য: এক্সকোড ৮.০ হিসাবে, বাগটি ঠিক করা হয়েছে।


3
আমি নিশ্চিত করতে পারি যে এটি এখনও এক্সকোড 6.1 (6A1052 ডি) অ্যাপ স্টোর রিলিজের ক্ষেত্রে in
jodm

3
কোনও সমাধান নয়, তবে আমি কোনও বিভাগ ব্যবহার করে সমস্যার সমাধান করতে সক্ষম হয়েছি। আমার বিভাগ UILabel + Font.h (আমার কাছে বোতামগুলির জন্যও একটি রয়েছে) নিম্নলিখিত কোডটি অন্তর্ভুক্ত করে। - (অকার্যকর) জাগ্রত থেকে ফ্রেমনিব {ভাসমান আকার = [স্ব.ফন্ট পয়েন্টসাইজ]; self.font = [ইউআইফোন্ট ফন্টউথনাম: @ "আপনার কাস্টমফন্ট" আকার: আকার]; } সুতরাং, এটি আমাদের সিস্টেম ফন্টের সাথে সাইজের শ্রেণিগুলি বিভিন্ন আকারের শ্রেণিতে বিন্দু মান নির্ধারণ করতে সহায়তা করে এবং বিভাগটি নিশ্চিত করে যে সঠিক ফন্টটি সেট করা আছে। অ্যাপল কোনও আপডেট প্রকাশ না করা পর্যন্ত আপনি সেটিকে যেতে পারেন?
ড্যানিয়েল রেটিফ ফৌরি

2
এখনও এক্সকোড 6.3.1 এ সমাধান করা হয়নি। আমি এতে ক্ষিপ্ত।
ক্রোধ 11

7
এখনও এক্সকোড 7 ফাইনাল নিয়ে কাজ করছেন না। অ্যাপল কেন এটি ঠিক করে না বুঝতে পারে না।
আর্নেস্তো

5
এখনও এক্সকোড 7.2 আইওএস 9.2
মোজতাবা

উত্তর:


41

দ্রুত ফিক্স:

1) আকার শ্রেণীর জন্য সিস্টেম হিসাবে ফন্ট সেট করুন

লেবেল বৈশিষ্ট্য পরিদর্শক

2) সাবক্লাস ইউআইএলবেল এবং "লেআউটসুব্যুভিউস" পদ্ধতিটির মতো ওভাররাইড

- (void)layoutSubviews
{
  [super layoutSubviews];

   // Implement font logic depending on screen size
    if ([self.font.fontName rangeOfString:@"bold" options:NSCaseInsensitiveSearch].location == NSNotFound) {
        NSLog(@"font is not bold");
        self.font = [UIFont fontWithName:@"Custom regular Font" size:self.font.pointSize];
    } else {
        NSLog(@"font is bold");
        self.font = [UIFont fontWithName:@"Custom bold Font" size:self.font.pointSize];
    }

}

যাইহোক, এটি আইকনিক ফন্টগুলির জন্য খুব সুবিধাজনক কৌশল


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

@ মনেমিয়া আমি সম্মত আমার লক্ষ্যটি কেবল সেই উপায়টি কীভাবে পরিচালনা করা যায় তার এক উপায় দেখানো।
রেজার 28

1
দুর্দান্ত কাজ করে। যদিও আপনাকে ইউআইএলবেল সাবক্লাস করার দরকার নেই, আপনি কেবল লেবেলটি ধারণ করে এমন পদ্ধতিতে এই পদ্ধতিটি ওভাররাইড self.label.font = ...করতে পারেন এবং এভাবে আপনি বিভিন্ন জায়গায় বিভিন্ন ফন্ট ব্যবহার করতে পারেন।
কেপিএম

অথবা আপনি ফন্টের নাম সংরক্ষণ করতে, একই কাস্টম লেবেল শ্রেণীর পুনরায় ব্যবহার করতে এবং স্টোরিবোর্ডে বিভিন্ন ফন্টের জন্য অনুরোধ করতে একটি @ আইবিআই স্পেসটেবল সেট আপ করতে পারেন।
ক্রেগ গ্রুমিট

ইউআইটিেক্সটফিল্ডের জন্য কি একই রকম সমাধান রয়েছে?
ক্রিস বাইট

17

সবকিছু চেষ্টা করার পরে, আমি শেষ পর্যন্ত উপরের সমাধানগুলির সংমিশ্রণে স্থির হয়েছি। এক্সকোড 7.2, সুইফট 2 ব্যবহার করে।

import UIKit

class LabelDeviceClass : UILabel {

    @IBInspectable var iPhoneSize:CGFloat = 0 {
        didSet {
            if isPhone() {
                overrideFontSize(iPhoneSize)
            }
        }
    }

    @IBInspectable var iPadSize:CGFloat = 0 {
        didSet {
            if isPad() {
                overrideFontSize(iPadSize)
            }
        }
    }

    func isPhone() -> Bool {
        // return UIDevice.currentDevice().userInterfaceIdiom == .Phone
        return !isPad()
    }

    func isPad() -> Bool {
        // return UIDevice.currentDevice().userInterfaceIdiom == .Pad
        switch (UIScreen.mainScreen().traitCollection.horizontalSizeClass, UIScreen.mainScreen().traitCollection.verticalSizeClass) {
        case (.Regular, .Regular):
            return true
        default:
            return false
        }
    }

    func overrideFontSize(fontSize:CGFloat){
        let currentFontName = self.font.fontName
        if let calculatedFont = UIFont(name: currentFontName, size: fontSize) {
            self.font = calculatedFont
        }
    }

}
  • @IBInspectable আপনাকে স্টোরিবোর্ডে ফন্টের আকার সেট করতে দেয়
  • (ডায়নামিক টেবিল ভিউ সারি উচ্চতার জন্য অসীম লুপ) এবং (@ কোকোনাব এর মন্তব্য দেখুন) didSetথেকে সমস্যাগুলি এড়াতে এটি একটি পর্যবেক্ষক ব্যবহার করেlayoutSubviews()awakeFromNib()
  • এটি ডিভাইস আইডিয়ামের চেয়ে আকারের ক্লাসগুলি ব্যবহার করে, শেষ পর্যন্ত এটি ব্যবহার করার আশায় @IBDesignable
  • দুঃখের বিষয়, এই অন্যান্য স্ট্যাক নিবন্ধ অনুযায়ী @IBDesignableকাজ করে নাtraitCollection
  • বৈশিষ্ট্য সংগ্রহের স্যুইচ বিবৃতিটি এই স্ট্যাক নিবন্ধেরUIScreen.mainScreen() পরিবর্তে সম্পাদিত হয়self

সেরা উত্তর, তবে দুঃখের সাথে ভোটাভুটি .. ধন্যবাদ
রোহিত প্রধান

9

এর জন্য কার্যকর UILabel: সমস্ত আকারের শ্রেণিতে একই ফন্টের আকার রাখুন, তবে পরিবর্তে প্রতিটি আকার শ্রেণিতে আপনার লেবেলের উচ্চতা পরিবর্তন করুন। আপনার লেবেলে অবশ্যই স্বতঃলিঙ্ক সক্ষম থাকতে হবে। এটা আমার ক্ষেত্রে খুব ভাল কাজ করেছে।


1
প্রতিটি আকারের ক্লাসে আমার লেবেলের প্রস্থ পরিবর্তন করে আমি একই জিনিস করতে সক্ষম হয়েছি। ভালো পরামর্শ!
dmzza

1
আমার ইউআইবিবেলের জন্য একটি ছোট নির্দিষ্ট উচ্চতা নির্ধারণ করে আমি ফন্টটি সঙ্কুচিত করতে পেলাম না, আপনি কীভাবে এটি কাজ করতে পেরেছেন? adjustsFontSizeToFitWidthকেবল প্রস্থের জন্য কাজ করছে বলে মনে হচ্ছে (যা আমি ব্যবহার করতে পারছি না কারণ লেবেলের পাঠ্যটি গতিশীল)।
আর্নেস্তো

আমার প্রস্থ ফিট করতে প্রস্থের সাথে একই সমস্যা রয়েছে
জুলাই

1
আমি তদারকির উচ্চতার অনুপাতে লেবেলের উচ্চতার সীমাবদ্ধতা সেট করে শেষ করেছি। আপনি যতক্ষণ পর্যন্ত আইবিতে লেবেলের "লাইনস" প্যারামিটারটি সেট করেন না এটি ঠিক আছে
ডোরিয়ান রায়

8

এই (এবং অন্যান্য এক্সকোড - আকারের ক্লাস সম্পর্কিত) বাগটি আমাকে সম্প্রতি মারাত্মক শোকের কারণ হতে হয়েছিল কারণ আমাকে একটি বিশাল স্টোরিবোর্ড ফাইল হ্যাকিংয়ের বিষয়গুলি থেকে দূরে যেতে হয়েছিল।

এই অবস্থানের অন্য কারও জন্য, আমি ব্যথা কমাতে @ রেজার 28 এর উত্তরের উপরে কিছু যুক্ত করতে চাই।

আপনার কাস্টম সাবক্লাসের শিরোনাম ফাইলটিতে, IBInspectableআপনার রানটাইম বৈশিষ্ট্যের জন্য ব্যবহার করুন । এটি এই বৈশিষ্ট্যগুলিকে "অ্যাট্রিবিউটস ইন্সপেক্টর" থেকে অ্যাক্সেসযোগ্য করে তুলবে, ফন্ট সেটিংসের জন্য পূর্বনির্ধারিত অবস্থানের উপরে দৃশ্যমানভাবে।

উদাহরণ ব্যবহার:

@interface MyCustomLabel : UILabel

    @property (nonatomic) IBInspectable NSString *fontType;
    @property (nonatomic) IBInspectable CGFloat iphoneFontSize;
    @property (nonatomic) IBInspectable CGFloat ipadFontSize;

@end

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

এখানে চিত্র বর্ণনা লিখুন

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


আমি আপনার নির্দেশ অনুসারে যুক্ত করেছি তবে আমি xib এ দৃষ্টিভঙ্গি "বৈশিষ্ট্য পরিদর্শক" অ্যাক্সেস খুঁজে পাচ্ছি না তবে কীভাবে এটি অর্জন করব?
দর্শনা কুঞ্জাদিয়া

3

@ রেজার 28 এর একটির মতো সমাধান তবে আমি মনে করি এটি আরও কিছুটা সর্বজনীন। এছাড়াও, পুরানো আইওএস সংস্করণগুলিতে সূক্ষ্মভাবে কাজ করে

https://gist.github.com/softmaxsg/8a3ce30331f9f07f023e


এবং নিশ্চিত, আপনি ইন্টারফেস বিল্ডারে সম্পত্তি ওভাররাইডফন্টনাম সেট করতে পারেন যা অপ্রয়োজনীয় কোড লেখা এড়াতে দেয়
ভিটালি

এটি আমার পক্ষে কাজ করে না, আমি উপরের পদ্ধতির মধ্যে ইনস্টল করা সমস্ত ফন্ট তালিকাভুক্ত করেছি এবং আমার ফন্ট তালিকাভুক্ত এবং ভেরিয়েবলের মধ্যে নির্ধারিত হয়েছিল তবে সিমুলেটারের লেবেলে ফন্টের শো পরিবর্তন হয়নি এবং আমি ডিভাইসটি ধরে নিয়েছি
জুলস

3

বাগটি এখনও XCode 7.0 GM তে বৈধ।

রেজার 28 এর সমাধানটি কিছু ক্ষেত্রে অসীম লুপগুলির কারণ হয়। আমার অভিজ্ঞতা এটি সোয়াইপভিউয়ের সাথে একযোগে ব্যবহার করে চলেছে

পরিবর্তে, আমি আপনাকে পরামর্শ দিচ্ছি যে:

1) সাবক্লাস UILabel এবং ওভাররাইড সেটফন্ট :

- (void)setFont:(UIFont *)font
{
    font = [UIFont fontWithName:(@"Montserrat") size:font.pointSize];
    [super setFont:font];
}

2) আপনার ইউআইএলবেলগুলির কাস্টম ক্লাস সেট করুন এবং তারপরে সিস্টেম ফন্ট ব্যবহার করে ফন্ট আকারের ক্লাসগুলি সেট করুন

এখানে চিত্র বর্ণনা লিখুন


@ মার্টেন1909 আপনি কি ওয়ার্কআউন্ড বা সোজা এক্সকোড পথে উল্লেখ করছেন? প্রথমটি যদি আপনি দয়া করে সংস্করণটি নির্দিষ্ট করতে পারেন তবে আমি এটি পুনরুত্পাদন করার চেষ্টা করব?
ফোটি দিম

দেখে মনে হচ্ছে যে আমি সর্বদা ভুল ফন্ট পরিবারের নাম ব্যবহার করে আসছি। দেখা যাচ্ছে যে এই জাতীয় ক্ষেত্রে ফন্টগুলি 14.0 পিন্ট-আকারের একটি সিস্টেম ফন্টে পুনরায় সেট করা হয়েছে। আমার খারাপ। তবে এটি অন্যের কাজে লাগতে পারে!
বেরেনচট

0

সমস্যাটি এখনও রয়েছে যে আপনি ইন্টারফেস বিল্ডার থেকে বিভিন্ন আকারের শ্রেণীর জন্য ফন্ট সেট করতে বৈশিষ্ট্যটি ব্যবহার করতে পারবেন না।

আপনি ঠিক নীচের মতো চান এমন ডিভাইসের উপর ভিত্তি করে ফন্ট সেট করুন:

if (Your Device is iPAd) //For iPad
{
   [yourLabel setFont:[UIFont fontWithName:@"FontName" size:FontSize]]; 
}
else  //For Other Devices then iPad
{
   [yourLabel setFont:[UIFont fontWithName:@"FontName" size:FontSize]]; 
}

এটি সমস্ত ডিভাইসে পুরোপুরি কাজ করে।


0

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

#import <UIKit/UIKit.h>

@interface UILabelEx : UILabel


@end

#import "UILabelEx.h"
#import "Constants.h"

@implementation UILabelEx

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
    [super traitCollectionDidChange: previousTraitCollection];

    self.font = [UIFont fontWithName:APP_FONT size:self.font.pointSize];   
}
@end

0

এখনও কোন স্বাক্ষরিত সঠিক উত্তর। এই কোডটি আমার পক্ষে কাজ করে। আপনাকে প্রথমে ইন্টারফেস বিল্ডারে আকারের ক্লাসগুলির জন্য ফন্টের আকারটি অক্ষম করতে হবে। আইবিতে আপনি কাস্টম ফন্ট ব্যবহার করতে পারেন।

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
    [super traitCollectionDidChange: previousTraitCollection];

    if ((self.traitCollection.verticalSizeClass != previousTraitCollection.verticalSizeClass)
        || self.traitCollection.horizontalSizeClass != previousTraitCollection.horizontalSizeClass) {

         self.textField.font = [UIFont fontWithName:textField.font.fontName size:17.f];

    }
}

0

উপরের উত্তরগুলির কয়েকটি সংমিশ্রণ সহায়ক ছিল। আমি সুইফট ইউআইএলবেল এক্সটেনশনের মাধ্যমে আইবি বাগটি কীভাবে সমাধান করেছি তা এখানে:

import UIKit

// This extension is only required as a work-around to an interface builder bug in XCode 7.3.1
// When custom fonts are set per size class, they are reset to a small system font
// In order for this extension to work, you must set the fonts in IB to System
// We are switching any instances of ".SFUIDisplay-Bold" to "MuseoSans-700" and ".SFUIDisplay-Regular" to "MuseoSans-300" and keeping the same point size as specified in IB

extension UILabel {
    override public func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)

        if ((traitCollection.verticalSizeClass != previousTraitCollection?.verticalSizeClass) || traitCollection.horizontalSizeClass != previousTraitCollection?.horizontalSizeClass) {
            //let oldFontName = "\(font.fontName)-\(font.pointSize)"

            if (font.fontName == systemFontRegular) {
                font = UIFont(name: customFontRegular, size: (font?.pointSize)!)
                //xlog.debug("Old font: \(oldFontName) -> new Font: \(font.fontName) - \(font.pointSize)")
            }
            else if (font.fontName == systemFontBold) {
                font = UIFont(name: customFontBold, size: (font?.pointSize)!)
                //xlog.debug("Old font: \(oldFontName) -> new Font: \(font.fontName) - \(font.pointSize)")
            }
        }
    }
}

-1

আমি সুইফট, এক্সকোড 6.4 ব্যবহার করছি। সুতরাং আমি এই কি

import Foundation
import UIKit

    @IBDesignable class ExUILabel: UILabel {

        @IBInspectable var fontName: String = "Default-Font" {
            didSet {
                self.font = UIFont(name: fontName, size:self.font.pointSize)
            }
        }

        override func layoutSubviews() {
            super.layoutSubviews()
            self.font = UIFont(name: fontName, size:self.font.pointSize)
        }
    }
  1. গোটো ডিজাইনার -> পরিচয় পরিদর্শক -> এক্সউইলবেলে ক্লাস সেট করুন

  2. তারপরে ডিজাইনার এট্রিবিউট ইন্সপেক্টর এ যান এবং ফন্টের নাম সেট করুন।


-1

আমি আরও দ্রুত সমাধান নিয়ে এসেছি (আমি ধরে নিই যে আপনি সর্বদা আপনার একটি কাস্টম ফন্ট ব্যবহার করেন)।

ইউআইএবেলের জন্য একটি বিভাগ তৈরি করুন এবং বিভিন্ন শ্রেণীর জন্য বর্গী স্টোরিবোর্ড ব্যবহার করে বগি স্টোরিবোর্ড ব্যবহার করে ফাইলগুলি অন্তর্ভুক্ত করুন:

@implementation UILabel (FontFixForSizeClassesAppleBug)

- (void)layoutSubviews
{
    [super layoutSubviews];
    if([[UIFont systemFontOfSize:10].familyName isEqualToString:self.font.familyName]) {
        //workaround for interface builder size classes bug which ignores custom font if various classes defined for label: http://stackoverflow.com/questions/26166737/custom-font-sizing-in-xcode6-size-classes-not-working-properly-w-custom-fonts
        self.font = [UIFont fontWithName:@"YOUR_CUSTOM_FONT_NAME" size:self.font.pointSize];
    }
}

@end

স্টোরিবোর্ডে আপনার কাস্টম ফন্টগুলি কেবল ব্যবহার করুন। যখন বগি ইন্টারপ্রেটার তার পরিবর্তে সিস্টেম ফন্ট ব্যবহার করবে তখন আপনার নিজস্ব এই বিভাগটি এটি আপনার কাস্টম ফন্টে স্যুইচ করবে।


-1: এই জাতীয় বিভাগে পদ্ধতিগুলি ওভাররাইড করা ভাল ধারণা নয়। কারণ: stackoverflow.com/questions/5272451/... পরিবর্তে, পাঁচমিশালী মদ্যবিশেষ উচিত (যদিও হল hacky) অথবা উপশ্রেণী।
জেআরজি-বিকাশকারী

-6

আমারও একই সমস্যা ছিল এবং একটি সত্যিই পরিষ্কার নয়, তবে দুর্দান্ত সমাধানটি পেয়েছি!

  1. প্রথমে আপনি সিস্টেমের ফন্টের নাম সহ স্টোরিবোর্ডে প্রয়োজনীয় ফন্টের আকার সেট করুন।
  2. তারপরে এই লেবেলে আপনি 100 থেকে 110 পর্যন্ত ট্যাগ বরাদ্দ করেন (বা তার চেয়ে বেশি তবে 10 টি আমার কাছে সবসময় এক দর্শন নিয়ামক হিসাবে যথেষ্ট ছিল)।
  3. তারপরে এই কোডটি আপনার ভিসির উত্স ফাইলে রাখুন এবং ফন্টের নাম পরিবর্তন করতে ভুলবেন না। দ্রুত মধ্যে কোড।
override func viewDidLayoutSubviews() {
    for i in 100...110 {
        if let label = view.viewWithTag(i) as? UILabel {
            label.font = UIFont(name: "RotondaC-Bold", size: label.font.pointSize)
        }
    }
}

1
ট্যাগ ব্যবহার করবেন না। আইবিউটলেট ব্যবহার করুন। ট্যাগ খারাপ। ডাব্লুডাব্লুডিসি 2015 সেশন 231 দেখুন: "আপনি যদি ট্যাগ সহ ভিউ বা ট্যাগ ট্যাগ ইউআইভিউ এপিআই এবং শিপিং কোডটি ব্যবহার করেন তবে আমি আপনাকে সেখান থেকে সরে যেতে উত্সাহিত করতে যাচ্ছি। এর প্রতিস্থাপন হিসাবে, আপনার ক্লাসে সম্পত্তি ঘোষণা করুন এবং তারপরে আপনার যা প্রয়োজন সেগুলির সাথে আপনার প্রকৃত সংযোগ থাকবে ”"
কেপিএম

আমি দুঃখিত যে এই সমাধানটি নিখুঁত নয়, তবে এটি কার্যকর!
সার্জ_ভ

-8
  • আপনার অ্যাপ্লিকেশন .প্লাস্টিতে অ্যাপ্লিকেশন দ্বারা সরবরাহ করা ফন্টগুলি যুক্ত করুন
  • আপনার .tf ফাইলটি আইটেম 0 এ যুক্ত করুন
  • এটি ব্যবহার করুন [ইউআইফোন্ট ফন্টউথনাম: "উদাহরণ.ttf" আকার: 10]

এটি এই সমস্যার কোনও উত্তর নয়। স্পষ্টতই আপনি কাস্টম ফন্টগুলি প্রোগ্রামিকভাবে ব্যবহার করতে পারেন, তবে আমার প্রশ্নটি হ'ল আইওএস 8 এর একটি বাগ যা কাস্টম ফন্টগুলি আকারের শ্রেণির উপর নির্ভর করে স্বয়ংক্রিয়ভাবে পরিবর্তন হতে বাধা দেয়।
মনিমিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.