[Iphone] iOS: متعدد UILabel في تخطيط تلقائي



Answers

قم بتوسيع رقم مجموعة التسميات الخاص بك إلى 0 ، وكذلك الأهم من ذلك بالنسبة لضبط مجموعة التخطيط التلقائي إلى> = x. التخطيط التلقائي سوف يقوم بالباقي. قد تحتوي أيضًا على العناصر الأخرى الخاصة بك استنادًا إلى العنصر السابق لتحديد موضعها بشكل صحيح.

Question

أواجه مشكلة في محاولة تحقيق بعض سلوك التنسيق الأساسي باستخدام التنسيق التلقائي. جهاز تحكم طريقة العرض الخاص بي يشبه هذا في IB:

العلامة العليا هي تسمية العنوان ، لا أعرف عدد الخطوط التي ستكون عليها. أحتاج تسمية العنوان لعرض جميع أسطر النص. أحتاج أيضًا إلى التسميتين الأخريين والصورة الصغيرة الموضحة أسفل العنوان مباشرة ، مهما بلغ طولها. لقد قمت بضبط قيود التباعد الرأسي بين التسميات والصورة الصغيرة ، وكذلك القيد التباعدي الأعلى بين تسمية العنوان وعرضه الفائق وقيد التباعد السفلي بين الصورة الصغيرة وعرضها الفائق. لا يحتوي UIView الأبيض على قيود الارتفاع ، لذلك يجب أن يمتد عموديًا لاحتواء عملياته الفرعية. لقد قمت بتعيين عدد الأسطر الخاصة بتسمية العنوان إلى 0.

كيف يمكنني الحصول على تصنيف العنوان لتغيير حجمه ليناسب عدد السطور المطلوبة بواسطة السلسلة؟ ما أفهمه هو أنه لا يمكنني استخدام أساليب setFrame لأنني أستخدم Auto Layout. ولا بد لي من استخدام Auto Layout لأنني أحتاج إلى تلك المشاهدات الأخرى للبقاء دون تسمية العنوان (ومن هنا تأتي القيود).

كيف يمكنني جعل هذا يحدث؟




كنت أقاتل فقط مع هذا السيناريو بالضبط ، ولكن مع عدد غير قليل من وجهات النظر التي تحتاج إلى تغيير حجمها والانتقال أسفل حسب الضرورة. كان يقودني للمكسرات ، لكنني برزت في النهاية.

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

طريقة سهلة لمعرفة ما إذا كانت هذه هي الحالة من خلال محاولة تغيير حجم التسمية يدويًا. هل يسمح لك IB بتطويره؟ إذا حدث ذلك ، فهل تتحرك العلامات أدناه كما تتوقع؟ تأكد من التحقق من كلاهما قبل تغيير حجمك لترى كيف ستحرك قيودك وجهات نظرك:

إذا كان الملف الشخصي عالقًا ، فاتبع طرق العرض أسفله وتأكد من أن أحدهما لا يحتوي على مساحة أعلى لعرض القيد الفائق. بعد ذلك فقط تأكد من تعيين خيار عدد الأسطر الخاص بالتسمية على 0 ويجب أن يتولى الأمر الباقي.




طريقة واحدة للقيام بذلك ... كلما زاد طول النص ، حاول تغيير (تقليل) الخطوط في نص التسمية باستخدام

Label.adjustsFontSizeToFitWidth = YES;



لم يعمل أي من الحلول المختلفة التي تم العثور عليها في العديد من الموضوعات حول هذا الموضوع بشكل مثالي لحالتي (x التسميات متعددة الأسطر الديناميكية في خلايا عرض الجدول الديناميكي).

لقد وجدت طريقة للقيام بذلك:

بعد تعيين القيود على التسمية وتعيين الخاصية المتعددة الأسطر الخاصة به إلى 0 ، إنشاء فئة فرعية من UILabel؛ اتصلت بالألغام AutoLayoutLabel:

@implementation AutoLayoutLabel

- (void)layoutSubviews{
    [self setNeedsUpdateConstraints];
    [super layoutSubviews];
    self.preferredMaxLayoutWidth = CGRectGetWidth(self.bounds);
}

@end



Links