العمل مع النص هو مهمة أساسية عند إنشاء واجهات التطبيقات المحمولة الحديثة. من اختيار الخط إلى ضبط التباعد بين الأحرف — كل جانب يؤثر على إدراك المنتج. وفقًا لوثائق Apple NSAttributedString، فإن تنسيق النص الصحيح مرتبط مباشرة بقابلية القراءة وإمكانية الوصول للواجهة.
النقاط الرئيسية
NSAttributedString هي الفئة الأساسية في iOS للعمل مع النص المنسق. تسمح بتطبيق السمات على أحرف أو نطاقات فردية: الخط عبر UIFont، اللون عبر UIColor، التباعد بين الأحرف عبر kern، والتباعد بين الأسطر عبر NSMutableParagraphStyle. في التطبيقات المحمولة، تُستخدم NSAttributedString في كل مكان — من UILabel إلى UITextView المعقد مع دعم التحرير.
UIFont هي الفئة الرئيسية للعمل مع الخطوط على iOS. تدعم خطوط النظام والخطوط المخصصة و Dynamic Type. يقوم UIFont(name:size:) بتحميل خط بالاسم، و UIFont.systemFont(ofSize:weight:) بتحميل خط النظام. يسمح UIFontDescriptor بتعديل خط موجود: تغيير الحجم أو الوزن أو إضافة مصفوفة تحويل. للخطوط المخصصة، يُضاف ملف .ttf إلى المشروع ويُسجل في Info.plist تحت مفتاح Fonts provided by application.
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont(name: "HelveticaNeue-Bold", size: 18) as Any,
.foregroundColor: UIColor.darkGray as Any,
.kern: 1.5 as Any
]
let attributedString = NSAttributedString(
string: "Форматированный текст",
attributes: attributes
)
label.attributedText = attributedString
NSMutableParagraphStyle هو نسخة قابلة للتعديل من ParagraphStyle لتكوين عرض الفقرات. يتحكم في المحاذاة (alignment)، والتباعد بين الأسطر (lineSpacing)، والمسافات البادئة (headIndent، tailIndent)، ووضع القطع (lineBreakMode). يعتبر ParagraphStyle ضروريًا لقابلية قراءة النصوص الطويلة على الأجهزة المحمولة: lineSpacing المناسب يمنع تداخل الأسطر، و lineBreakMode يمنع قص الكلمات. يحدد إعداد paragraphSpacing المسافة بين الفقرات.
SpannableString هي الأداة الرئيسية لتنسيق النص على Android. تعمل من خلال آلية كائنات Span، كل منها مسؤول عن جانب واحد: StyleSpan للخط العريض أو المائل، ForegroundColorSpan للون، URLSpan للروابط، UnderlineSpan للتسطير. SpannableStringBuilder هو المكافئ لـ NSMutableAttributedString، مما يسمح ببناء النص من أجزاء متعددة. فهم SpannableString ضروري لإنشاء واجهات مرنة بنص منسق في التطبيقات المحمولة.
Typeface هي فئة العمل مع الخطوط على Android. تدعم خطوط النظام Roboto و Noto، بالإضافة إلى الخطوط المخصصة. يقوم Typeface.createFromResource() بتحميل خط من res/font/، و Typeface.createFromAsset() من مجلد assets. يدعم Android 8.0+ عائلات الخطوط في XML، مما يجمع ملفات خطوط متعددة في مورد واحد. يتم تعيين خط مخصص للنص في التطبيقات المحمولة على Android عبر السمة android:fontFamily أو برمجيًا باستخدام setTypeface().
TextMeasurer (API 29+) هي أداة حديثة لقياس النص دون الارتباط بـ View. تحسب العرض والارتفاع ومواضع الأحرف قبل العرض. في واجهات API القديمة، يُستخدم Paint.measureText() للنص أحادي السطر أو StaticLayout للنص متعدد الأسطر. TextMeasurer مفيد بشكل خاص في Views المخصصة حيث يُرسم النص عبر Canvas.drawText(). القياس الصحيح يمنع قص الأحرف في الواجهة.
val spannable = SpannableString("Жирный текст с цветом")
spannable.setSpan(
StyleSpan(Typeface.BOLD),
0, 6,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
spannable.setSpan(
ForegroundColorSpan(Color.RED),
14, 19,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
textView.text = spannable
الطباعة في التطبيقات المحمولة هي تكوين شامل للخطوط والتباعد بين الأحرف والأسطر. تؤثر الطباعة الصحيحة في تطوير التطبيقات المحمولة بشكل مباشر على قابلية قراءة النص والإدراك البصري للواجهة. دعنا نلقي نظرة على المعلمات الرئيسية المتاحة على كلا المنصتين.
الكيرنينغ هو ضبط المسافة بين أزواج أحرف محددة (AV، To، Wa). التتبع هو التباعد المنتظم بين الأحرف للنص بأكمله أو جزء منه. على iOS، يُضبط الكيرنينغ عبر NSKernAttributeName، على Android — عبر خاصية letterSpacing في TextView. القيم السالبة تقرب الأحرف، والقيم الموجبة تباعدها. تتطلب الطباعة في تطوير التطبيقات المحمولة ضبطًا دقيقًا لهذه المعلمات: للعناوين الكبيرة، عادةً ما يُزيد التباعد بين الأحرف، بينما يبقى قياسيًا للنص الأساسي.
| المعلمة | iOS | Android |
|---|---|---|
| نص منسق | NSAttributedString | SpannableString |
| الخط | UIFont / CTFont | Typeface |
| التباعد بين الأحرف | NSKernAttributeName | letterSpacing |
| التباعد بين الأسطر | lineSpacing | lineSpacingExtra |
| الروابط الطباعية | NSLigatureAttributeName | ميزات OpenType |
| القطع | lineBreakMode .byTruncatingTail | android:ellipsize |
الروابط الطباعية هي حروف رسومية خاصة تحل محل مجموعات من حرفين أو أكثر: fi، fl، ffi. على iOS، تُتحكم الروابط الطباعية عبر NSLigatureAttributeName: 0 — معطلة، 1 — قياسية، 2 — جميع المتاحة. على Android، تُتحكم الروابط الطباعية على مستوى الخط عبر ميزات OpenType. يؤدي تمكين الروابط الطباعية إلى تحسين مظهر النص، خاصة في الخطوط ذات الرقيق. تستخدم الطباعة في تطوير التطبيقات المحمولة الروابط الطباعية بشكل أساسي للعناوين والشعارات.
الخطوط المخصصة هي إحدى الأدوات الرئيسية لإنشاء نمط بصري فريد للتطبيق. تساعد في إبراز العلامة التجارية وتحسين تجربة المستخدم. في التطبيقات المحمولة، تُستخدم الخطوط المخصصة للعناوين والشعارات والعناصر البارزة والهوية المؤسسية.
الخطوط المتغيرة هي تقنية خطوط حديثة حيث يحتوي ملف واحد على أنماط متعددة: من الرفيع إلى الغامق جدًا، ومن الضيق إلى العريض. يقلل هذا من حجم التطبيق عن طريق استبدال عدة ملفات خطوط بملف واحد. على iOS، تدعم الخطوط المتغيرة عبر UIFont مع معلمة weight. على Android — عبر Typeface.Builder مع تحديد محاور التباين wght، wdth، slnt. استخدام الخطوط المتغيرة يبسط الطباعة في التطبيقات المحمولة: لا يحتاج المطور إلى تحميل ملفات منفصلة لكل نمط.
let customFont = UIFont(name: "CustomFont-Regular", size: 16)
let scaledFont = UIFontMetrics.default
.scaledFont(for: customFont)
label.font = scaledFont
label.adjustsFontForContentSizeCategory(true)
NSTextAttachment على iOS يسمح بتضمين UIImage داخل NSAttributedString — تتم محاذاة الصورة مع خط الأساس وتنتقل مع النص. على Android، المكافئ هو ImageSpan داخل SpannableString. كلا النهجين مفيدان للدردشة مع الرموز التعبيرية، وتغذية الأخبار بالأيقونات، والنماذج مع مربعات الاختيار المخصصة. من المهم تغيير حجم الصورة بشكل صحيح ليتناسب مع ارتفاع الخط بحيث يبدو النص والرسومات متناغمين.
بالإضافة إلى التنسيق الأساسي، يدعم النص في التطبيقات المحمولة تأثيرات بصرية إضافية: الظلال والمخطط التفصيلي والتشطيب والتسطير. توسع هذه الأدوات إمكانيات الطباعة ولكنها تتطلب تطبيقًا دقيقًا للحفاظ على قابلية القراءة.
ظل النص على iOS يُضبط عبر NSShadow مع offset و blurRadius و color. المخطط التفصيلي — عبر NSStrokeWidthAttributeName: القيم السالبة تنشئ تعبئة بمخطط تفصيلي، القيم الموجبة تنشئ المحيط فقط. التشطيب — NSUnderlineStyle (.single، .thick، .double). على Android، يتم تكوين ظل TextView عبر android:shadowRadius و android:shadowDx و android:shadowDy. يدعم SpannableString StrikethroughSpan و UnderlineSpan. يتم تنفيذ المخطط التفصيلي للنص على Android عبر OutlineSpan أو خط مخصص.
القطع هو اقتطاع النص بعلامات الحذف عند تجاوز الحاوية. على iOS، يتم تكوينه عبر lineBreakMode .byTruncatingTail و numberOfLines. على Android — عبر android:ellipsize="end" و android:maxLines. الشريط المتحرك هو رسم متحرك لنص متحرك متاح على Android عبر android:ellipsize="marquee". على iOS، لا يوجد مكافئ مدمج — تُستخدم مكتبة MarqueeLabel. القطع إلزامي لجميع النصوص أحادية السطر في التطبيقات المحمولة لتجنب قص المحتوى.
Dynamic Type هو نظام نص تكيفي في iOS يضبط حجم الخط بناءً على إعدادات إمكانية الوصول للمستخدم. استخدم UIFontMetrics لتوسيع نطاق الخطوط المخصصة. Dynamic Type إلزامي للتطبيقات المتوافقة مع إمكانية الوصول. على Android، المكافئ هو وحدات sp و scaledPixels، التي تتوسع وفقًا لإعدادات حجم النص في النظام.
الأسئلة الشائعة
NSAttributedString هي فئة iOS لإنشاء نص منسق بسمات الخط واللون والنمط على مستوى الأحرف والنطاقات.
SpannableString هي فئة Android لترميز النص عبر كائنات Span: ForegroundColorSpan و StyleSpan و URLSpan و UnderlineSpan.
أضف ملف .ttf إلى المشروع، وحدده في Info.plist تحت مفتاح Fonts provided by application، ثم استخدم UIFont(name:).
ضع ملف .ttf في res/font/، وأنشئ عائلة خطوط XML، وحدد android:fontFamily أو استخدم Typeface.createFromAsset().
الكيرنينغ هو المسافة بين أزواج الأحرف. الروابط الطباعية هي حروف رسومية خاصة لمجموعات الحروف. يتم التحكم بهما عبر NSKernAttributeName و NSLigatureAttributeName.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.