এক্সকোড 8 এবং আইওএস 10 থেকে, ভিউডিডলয়আউটসুভিউগুলিতে ভিউগুলি সঠিকভাবে আকার দেওয়া হয় না


95

দেখে মনে হচ্ছে viewDidLoadএক্সকোড 8 দিয়ে , সমস্ত ভিউকন্ট্রোলার সাবভিউতে 1000x1000 এর আকার রয়েছে। অদ্ভুত জিনিস, তবে ঠিক আছে, viewDidLoadভিউগুলি সঠিকভাবে আকারের করার চেয়ে ভাল জায়গা আর কখনও হতে পারে না।

তবে viewDidLayoutSubviews!

এবং আমার বর্তমান প্রকল্পে আমি একটি বোতামের আকার মুদ্রণের চেষ্টা করি:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    NSLog(@"%@", self.myButton);
}

লগটি আমার বাটনের জন্য আকারের (1000x1000) দেখায়! তারপরে আমি যদি কোনও বোতামে ক্লিক করি, উদাহরণস্বরূপ, লগটি একটি সাধারণ আকার দেখায়।

আমি অটোলেআউট ব্যবহার করছি।

এটা কি বাগ?


4
ইউআইআইমেজভিউয়ের সাথে একই সমস্যা থাকা - আমি যখন মুদ্রণ করি তখন আমি একটি অদ্ভুত ফ্রেম পেয়ে যাই = (0 0; 1000 1000) ;. আমি একটি ইউআইটিএবলভিউসিলের অভ্যন্তরে আছি এবং আমি একবার টেবিলভিউটি রিফ্রেশ করে ফ্রেমটি যা আশা করি তা হ'ল (সেলটি ভিউপোর্টের বাইরে চলে গেলে এবং আবার ফিরে আসে)। এটি কেন ঘটছে কারও কোনও ধারণা আছে (ডিফল্টরূপে অদ্ভুত ফ্রেম)?
ইউজেন ডিম্বোইউ

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

4
আপনি কি আপনার বোতামটির জন্য বৃত্তাকার কোণগুলি ব্যবহার করছেন? এর আগে লেআউটআইফনেড () কল করার চেষ্টা করুন।
ইউজেন ডিম্বোইউ

মজাদার. আমি সত্যিই একটি বৃত্তাকার সীমানা গণনা করতে ভিউ ফ্রেমটি ব্যবহার করছিলাম। এমনকি যদি প্রশ্নের উত্তর না দেয় তবে এটি কাজ করে। এটা মনে রাখা ভাল টিপ। ধন্যবাদ!
মার্টিন

আমি মনে করি কোনও ইউটিেক্সটফিল্ডের ডানদর্শনের ভিতরে একটি চিত্র বোতাম স্থাপন করতে আমার একই রকম সমস্যা হচ্ছে। আমি ইমেজ বোতামটির উচ্চতা এবং প্রস্থটি পাঠ্যক্ষেত্রের উচ্চতায় সেট করতে চেয়েছিলাম যাতে এটির অনুপাতটি বজায় থাকে এবং ধারকটি পড়ে যায় fall
আটলান্টচ_জেমস

উত্তর:


98

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

এই কার্যকারিতাটির আগে ব্যবহারকারীর প্রতিটি ভিউ নিয়ন্ত্রকের আকার ম্যানুয়ালি সেট করা উচিত। সুতরাং ভিউ কন্ট্রোলারটি একটি নির্দিষ্ট আকারের সাহায্যে সংরক্ষণ করা হয়েছিল, যা ব্যবহৃত হয়েছিলinitWithCoder প্রাথমিক ফ্রেম সেট করতে ।

এখন, এটি মনে হয় initWithCoder স্টোরিবোর্ডে সংজ্ঞায়িত আকারটি ব্যবহার করবেন না এবং ভিউকন্ট্রোলার দর্শন এবং এর সমস্ত সাবভিউগুলির জন্য 1000x1000 পিক্সেল আকার নির্ধারণ করবেন না।

এটি কোনও সমস্যা নয়, কারণ দর্শকদের সর্বদা এই বিন্যাস সমাধানগুলির মধ্যে দুটি ব্যবহার করা উচিত:

  • অটোলেআউট এবং সমস্ত সীমাবদ্ধতা আপনার দর্শন সঠিকভাবে বিন্যাস করবে

  • অটোরাইজিংমাস্ক, যা প্রতিটি দৃশ্যের সাথে লেআউট করবে যার সাথে কোনও বাধা নেই ( নোট অটোলেআউট এবং মার্জিন সীমাবদ্ধতাগুলি এখন একই দৃষ্টিতে সামঞ্জস্যপূর্ণ are o /! )

তবে ভিউ লেয়ারের সাথে সম্পর্কিত সমস্ত লেআউট স্টাফগুলির জন্য এটি একটি সমস্যা cornerRadius, যেহেতু অটোলেআউট বা স্বয়ংক্রিয়করণের মুখোশ স্তর স্তরের বৈশিষ্ট্যে প্রযোজ্য নয় ।

এই সমস্যার উত্তর দেওয়ার জন্য, সাধারণ উপায়টি হ'ল আপনি viewDidLayoutSubviewsযদি নিয়ামক হন বা layoutSubviewআপনি যদি কোনও দৃষ্টিতে থাকেন তবে তা ব্যবহার করা। এই মুহুর্তে (তাদের superআপেক্ষিক পদ্ধতিগুলি কল করতে ভুলবেন না ), আপনি নিশ্চিত যে সমস্ত লেআউট স্টাফ সম্পন্ন হয়েছে!

বেশ নিশ্চিত? হুম ... পুরোপুরি নয়, আমি মন্তব্য করেছি এবং সে কারণেই আমি এই প্রশ্নটি জিজ্ঞাসা করেছি, কিছু ক্ষেত্রে এখনও ভিউটির এই পদ্ধতিতে 1000x1000 আকার রয়েছে। আমি মনে করি আমার নিজের প্রশ্নের কোনও উত্তর নেই। এটি সম্পর্কে সর্বাধিক তথ্য দিতে:

1- কেবল তখন ঘরগুলি ছড়িয়ে দেওয়ার সময় এটি সুখী হয়! ইন UITableViewCell& UICollectionViewCellউপশ্রেণী, layoutSubviewবলা হবে না পরে subviews সঠিকভাবে আউট layed করা হবে।

২- @ ইউজেনডিম্বোইউ যেমন মন্তব্য করেছিলেন (দয়া করে আপনার উত্তর কার্যকর হলে তার উত্তরটি উপস্থাপন করুন), [myView layoutIfNeeded]বিনা স্তরযুক্ত সাবভিউতে কল করা ঠিক সময়ে সঠিকভাবে বিন্যাস করবে।

- (void)layoutSubviews {
    [super layoutSubviews];
    NSLog (self.myLabel); // 1000x1000 size 
    [self.myLabel layoutIfNeeded];
    NSLog (self.myLabel); // normal size
}

3- আমার মতে এটি অবশ্যই একটি বাগ is আমি এটি রাডারে জমা করেছি (আইডি 28562874)।

পিএস: আমি ইংরেজী নেটিভ নই, সুতরাং আমার ব্যাকরণ সংশোধন করা উচিত তবে আমার পোস্টটি সম্পাদনা করতে নির্দ্বিধায়;)

পিএস 2: আপনার যদি আরও ভাল সমাধান থাকে তবে নির্দ্বিধায় অন্য উত্তর না লিখুন। আমি গৃহীত উত্তর সরান।


4
thx, তবে আমি 28562874 আইডি সহ রাডারটি খুঁজে পাইনি, আমার কি রাডার ইউআরএল থাকতে পারে?
জো

আমার জন্য মনোমুগ্ধকর মতো কাজ করেছে, দেখার স্তরগুলির জন্যও!
hlynbech

@ জোয়ি, আমি জানি না যে আমি আমার বাগের লিঙ্কটি পেতে পারি কিনা। আমি কোনও সরাসরি ইউআরএল পাইনি এবং মনে হয় অন্যান্য ব্যবহারকারীরা আমার প্রতিবেদনগুলি দেখতে পাচ্ছেন না। এই এসও উত্তর স্ট্যাকওভারফ্লো.com /a/ 145223 / 127493 অনুসারে , মনে হয় যে কোনও বাগের অগ্রাধিকার বাড়ানোর সর্বোত্তম উপায় হ'ল সদৃশ তৈরি করা।
মার্টিন

এটি অ্যাপলের পক্ষে নির্বোধের বাইরে is আমার অটো লেআউট ভিউ কন্ট্রোলার দ্বারা সম্পূর্ণরূপে নির্দিষ্ট করা আছে এবং বেশ কয়েকটি পাঠ্য ক্ষেত্র এবং একটি ইউআইভিউউ-র এই বোকা 0,0,1000,1000 ফ্রেম রয়েছে। কিন্তু সব না. কীভাবে এই পালাতে পারে QA? আমি মনে করি আমি আরও একটি রাডার ফাইল করতে পারি যা তারা পড়বে না।
অহল্ফ

4
আমি আপনার অন্তর্দৃষ্টি এবং পরামর্শের জন্য আপনাকে এবং অন্য সবাইকে ধন্যবাদ জানাতে চাই। আমি সারা দিন আমার চুলগুলি টানতে কাটিয়েছি কারণ একটি UIStackViewঅভ্যন্তরের অভ্যন্তরে UICollectionViewCellসঠিক উচ্চতা ফিরছিল না viewDidLayoutSubviews। কল করা layoutIfNeededসঙ্গে সঙ্গে সমস্যাটি সংশোধন করে।
রুইজ

40

আপনি কি আপনার বোতামটির জন্য বৃত্তাকার কোণগুলি ব্যবহার করছেন? layoutIfNeeded()আগে কল করার চেষ্টা করুন ।


4
আহ, আরও রেপ পাওয়ার চেষ্টা করছেন? আমি আমার মন্তব্যে যেমন বলেছি, এটি প্রশ্নের উত্তর দেয় না। তবে এটি আমাকে সহায়তা করেছে যাতে আপনি একটি +1 :) অর্জন করেছেন
মার্টিন

4
এটি ভবিষ্যতে কাউকে সহায়তা করতে পারে এবং মন্তব্যের সাথে তুলনা করা আরও সহজ
ইউজেন ডিম্বোইউ

4
আমাকে এখনই সাহায্য করেছেন!
দাইদাই

@ দাইদাই শুনে খুশি!
ইউজেন ডিম্বোইউ

এইটা কাজ করে! কিন্তু কেন? এছাড়াও তবে সঠিক ফ্রেমের আকার পাওয়ার জন্য সঠিক সমাধান কী?
ক্র্যাশলোট

25

সমাধান: ভিতরে মোড়ানো সবকিছু viewDidLayoutSubviewsমধ্যে DispatchQueue.main.async

// swift 3

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    DispatchQueue.main.async {
        // do stuff here
    }
}

4
এমনকি যদি এটি রাখা হয় তবে এটি কাজ করছে -viewDidLoad... এইরকম এক বিস্ময়কর কাজ
মেডভেড নিক

4
সম্ভবত কারণ ভিউডিডলআউটসুভিউগুলি দেখার সময় সিস্টেমটির যা করার প্রয়োজন তা করার সময় ছিল না। প্রেরণকে কল করা আপনাকে একটি রানওল লাফিয়ে তোলে, যাতে সিস্টেম তার শব্দ শেষ করতে দেয়। আপনি যদি কয়েক মিলি সেকেন্ডের ঘুমের সাথে একই আচরণ পেতে পারতাম তবে আমি ঠিক
থাইবাট নোয়া

কারণ সমস্ত ইউআই টাস্কগুলি অবশ্যই মূল থ্রেডের মধ্যে সম্পাদন করা উচিত, আপনার সমাধানের জন্য ধন্যবাদ!
danywarner

18

আমি জানি এটি আপনার সঠিক প্রশ্ন নয়, তবে আমি একই ধরণের সমস্যায় পড়েছিলাম যেখানে আপডেটের সাথে আমার কিছু ভিউ ভিডডিডাউটসউভিউতে সঠিক ফ্রেমের আকার থাকা সত্ত্বেও গণ্ডগোল হয়েছে। আইওএস 10 রিলিজ নোট অনুসারে:

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

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

কাস্টম ইউআইভিউ সাবক্লাসযুক্ত কাস্টম ইউআইভিউ সাবক্লাসগুলি যা অটো লেআউটকে ওভাররাইড করে স্বরূপে লেআউটসুভিউগুলি এবং নোংরা লেআউটকে সুপার কল করার আগে লেআউট ফিডব্যাক লুপটি ট্রিগার করার ঝুঁকি থাকে যখন তারা সঠিকভাবে পরবর্তী লেআউটসুভিউ কলগুলিতে প্রেরণ করা হয় তখন তাদের অবশ্যই নিশ্চিত হওয়া উচিত কোনও সময়ে স্ব-স্বরে নোংরা লেআউট বন্ধ করুন (নোট করুন যে আইওএস 10 এর আগে এই কলটি মুক্তি দেওয়া হয়নি))

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


5

লেআউটআউটভিউগুলিতে ফ্রেমগুলি সঠিক না হলে (যা তারা নয়) আপনি মূল থ্রেডে কিছুটা কোড এ্যাসিঙ্ক প্রেরণ করতে পারেন। এটি সিস্টেমটিকে বিন্যাসটি করতে কিছুটা সময় দেয়। আপনার প্রেরণকৃত ব্লকটি কার্যকর হলে ফ্রেমগুলির যথাযথ আকার থাকে।


3

এটি আমার জন্য (হাস্যকরভাবে বিরক্তিকর) সমস্যাটি স্থির করেছে:

- (void) viewDidLayoutSubviews {

    [super viewDidLayoutSubviews];

    self.view.frame = CGRectMake(0,0,[[UIScreen mainScreen] bounds].size.width,[[UIScreen mainScreen] bounds].size.height);

}

সম্পাদনা / নোট: এটি একটি সম্পূর্ণ স্ক্রিনের ভিউকন্ট্রোলারের জন্য।


মেইনস্ক্রিনের সীমানা ব্যবহার করা ভাল সমাধান নয় কারণ অনেক ক্ষেত্রে ভিউকন্ট্রোলার পুরো পর্দার জায়গা নেয় না। এছাড়াও, [super viewDidLayoutSubviews];আপনার নিজের ভিউ নিজেই করেছেন এমন অনেকগুলি স্বয়ংচালিত সামগ্রীর কারণে এই পদ্ধতিতে কল করা উচিত
মার্টিন

@ মার্টিন আপনি কি সুপারিশ করেন? সম্মত হন এটি আদর্শ বলে মনে হচ্ছে না।
ক্র্যাশলোট

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

2

আসলে viewDidLayoutSubviewsআপনার ভিউর ফ্রেম সেট করার জন্য সেরা জায়গাও নয়। যতদূর আমি বুঝতে পেরেছি, এখন থেকে এটি করা উচিত কেবলমাত্র স্থানটি হ'ল layoutSubviewsআসল ভিউয়ের কোডের পদ্ধতি। আমি আশা করি আমি সঠিক না হলে কেউ সত্য করে যদি আমাকে সংশোধন করে!


আপনার উত্তরের জন্য ধন্যবাদ. অ্যাপল ডকুমেন্টেশন অন viewDidLayoutSubviewsখুব অস্পষ্ট। "আলোচনার" দ্বিতীয় বাক্যটি কোনওভাবে শেষেরটির সাথে দ্বন্দ্ব করে। বিকাশকারী.অ্যাপল.
মার্টিন

0

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

extension UIViewController {
    open override class func initialize() {
        if self !== UIViewController.self {
            return
        }
        DispatchQueue.once(token: "io.inspace.uiviewcontroller.swizzle") {
            ins_applyFixToViewFrameWhenLoadingFromNib()
        }
    }

    @objc func ins_setView(view: UIView!) {
        // View is loaded from xib file
        if nibBundle != nil && storyboard == nil && !view.frame.equalTo(UIScreen.main.bounds) {
            view.frame = UIScreen.main.bounds
            view.layoutIfNeeded()
        }
        ins_setView(view: view)
    }

    private class func ins_applyFixToViewFrameWhenLoadingFromNib() {
        UIViewController.swizzle(originalSelector: #selector(setter: UIViewController.view),
                                 with: #selector(UIViewController.ins_setView(view:)))
        UICollectionView.swizzle(originalSelector: #selector(UICollectionView.layoutSubviews),
                                 with: #selector(UICollectionView.ins_layoutSubviews))
        UITableView.swizzle(originalSelector: #selector(UITableView.layoutSubviews),
                                 with: #selector(UITableView.ins_layoutSubviews))
     }
}

extension UITableView {
    @objc fileprivate func ins_layoutSubviews() {
        if dataSource == nil {
            super.layoutSubviews()
        } else {
            ins_layoutSubviews()
        }
    }
}

extension UICollectionView {
    @objc fileprivate func ins_layoutSubviews() {
        if dataSource == nil {
            super.layoutSubviews()
        } else {
            ins_layoutSubviews()
        }
    }
}

প্রেরণ একবার প্রেরণ:

extension DispatchQueue {

    private static var _onceTracker = [String]()

    /**
     Executes a block of code, associated with a unique token, only once.  The code is thread safe and will
     only execute the code once even in the presence of multithreaded calls.

     - parameter token: A unique reverse DNS style name such as com.vectorform.<name> or a GUID
     - parameter block: Block to execute once
     */
    public class func once(token: String, block: (Void) -> Void) {
        objc_sync_enter(self); defer { objc_sync_exit(self) }

        if _onceTracker.contains(token) {
            return
        }

        _onceTracker.append(token)
        block()
    }
}

সুইজল এক্সটেনশন:

extension NSObject {
    @discardableResult
    class func swizzle(originalSelector: Selector, with selector: Selector) -> Bool {

        var originalMethod: Method?
        var swizzledMethod: Method?

        originalMethod = class_getInstanceMethod(self, originalSelector)
        swizzledMethod = class_getInstanceMethod(self, selector)

        if originalMethod != nil && swizzledMethod != nil {
            method_exchangeImplementations(originalMethod!, swizzledMethod!)
            return true
        }
        return false
    }
}

0

আমার সমস্যাটি এর থেকে ব্যবহার পরিবর্তন করে সমাধান করা হয়েছিল

-(void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    self.viewLoginMailTop.constant = -self.viewLoginMail.bounds.size.height;
}

প্রতি

-(void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];
    self.viewLoginMailTop.constant = -self.viewLoginMail.bounds.size.height;
}

তাই, ডিড থেকে উইল

সুপার অদ্ভুত


0

আমার জন্য আরও ভাল সমাধান।

protocol LayoutComplementProtocol {
    func didLayoutSubviews(with targetView_: UIView)
}

private class LayoutCaptureView: UIView {
    var targetView: UIView!
    var layoutComplements: [LayoutComplementProtocol] = []

    override func layoutSubviews() {
        super.layoutSubviews()

        for layoutComplement in self.layoutComplements {
            layoutComplement.didLayoutSubviews(with: self.targetView)
        }
    }
}

extension UIView {
    func add(layoutComplement layoutComplement_: LayoutComplementProtocol) {
        func findLayoutCapture() -> LayoutCaptureView {
            for subView in self.subviews {
                if subView is LayoutCaptureView {
                    return subView as? LayoutCaptureView
                }
            }
            let layoutCapture = LayoutCaptureView(frame: CGRect(x: -100, y: -100, width: 10, height: 10)) // not want to show, want to have size
            layoutCapture.targetView = self
            self.addSubview(layoutCapture)
            return layoutCapture
        }

        let layoutCapture = findLayoutCapture()
        layoutCapture.layoutComplements.append(layoutComplement_)
    }
}

ব্যবহার

class CircleShapeComplement: LayoutComplementProtocol {
    func didLayoutSubviews(with targetView_: UIView) {
        targetView_.layer.cornerRadius = targetView_.frame.size.height / 2
    }
}

myButton.add(layoutComplement: CircleShapeComplement())

0

ওভাররাইড লেআউটসুব্লায়ারগুলি (স্তরটির: CALayer) লেআউটের পরিবর্তে সেল সাবউভিউতে পর্যালোচনাগুলি সঠিক ফ্রেম রাখতে হবে


0

আপনার ভিউর ফ্রেমের উপর ভিত্তি করে যদি আপনার কিছু করার দরকার হয় - ওভাররাইড লেআউটসুভিউগুলি এবং কল লেআউটআইফনেড

    override func layoutSubviews() {
    super.layoutSubviews()

    yourView.layoutIfNeeded()
    setGradientForYourView()
}

আমার দর্শনটির জন্য ডিডলআউটসুভিউগুলি ভুল ফ্রেমটি ফিরিয়ে নিয়েছিল , যার জন্য আমার গ্রেডিয়েন্ট যুক্ত করা দরকার। এবং শুধুমাত্র লেআউটআইফনেড সঠিক কাজ করেছে :)


-1

আইওএসে নতুন আপডেট অনুযায়ী এটি আসলে একটি বাগ তবে আমরা এটি ব্যবহার করে এটি হ্রাস করতে পারি -

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

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