تقدر تلاحظ بأنه تقدر تعطل view بإستخدام disabled وتقدر تعطله بالاعتماد على شرط اذا القيمة الفلانية مثلا true عطل الزر
لكن في hidden ماتقدر تضيف شرط له !!
فتعرف على كيفية اخفاء الـ view بإستخدام شرط في هذا المقال
بعض المطورين يسنخدموا opacity بحيث يكون 0 معناه مخفي و 1 معناه ظاهر
ولكن هذا الامر خاطئه تمام لانه اولاً ما يشيل الـ View من هيكل الصفحة فقط يخفيه والثانياً اذا كان زر المستخدم يقدر يضغط عليه فتلاقيهم كحل بديل يضيفوا مع اخفاء الزر disabled بحيث يعطلوا الزر !
الحل الصحيح استخدام هذا الـ function طبعا راح تستغربوا من قيمة hidden
انها فاضيه ومني مستخدم hidden()
لانه لاحظت استخدم hidden() تخفي الـ view ولكن لا تزيله من الهيكيلة الصفحة
extension View {
@ViewBuilder func isHidden(_ hidden: Bool, remove: Bool) -> some View {
if hidden {
if !remove {
self.hidden()
}
} else { self }
}
}
اوقات كثيره تبغى تخفي الـ view وتزيله تماما من هيكلة الصفحة بحيث مثلا الـ view الي اسفله يستغل مساحته
مثال شاهد هذا الكود ، الكود ذا من المقال السابق ولكن لاحظ الفرق وجود زر اخفاء ، لاحظ اني اعتمد على قيمة hideMe لاخفاء الـ TextEditor
struct ContentView: View {
@State private var hideMe = false
var body: some View {
NavigationView {
ScrollView {
VStack {
NaturalText(text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.")
.padding()
NaturalText(text: "هذا النص هو مثال لنص يمكن أن يستبدل في نفس المساحة، لقد تم توليد هذا النص من مولد النص العربى، حيث يمكنك أن تولد مثل هذا النص أو العديد من النصوص الأخرى إضافة إلى زيادة عدد الحروف التى يولدها التطبيق.إذا كنت تحتاج إلى عدد أكبر من الفقرات يتيح لك مولد النص العربى زيادة عدد الفقرات كما تريد، النص لن يبدو مقسما ولا يحوي أخطاء لغوية، مولد النص العربى مفيد لمصممي المواقع على وجه الخصوص، حيث يحتاج العميل فى كثير من الأحيان أن يطلع على صورة حقيقية لتصميم الموقع.ومن هنا وجب على المصمم أن يضع نصوصا مؤقتة على التصميم ليظهر للعميل الشكل كاملاً،دور مولد النص العربى أن يوفر على المصمم عناء البحث عن نص بديل لا علاقة له بالموضوع الذى يتحدث عنه التصميم فيظهر بشكل لا يليق. هذا النص يمكن أن يتم تركيبه على أي تصميم دون مشكلة فلن يبدو وكأنه نص منسوخ، غير منظم، غير منسق، أو حتى غير مفهوم. لأنه مازال نصاً بديلاً ومؤقتاً.")
.padding()
.isHidden(hideMe, remove: true)
NaturalText(text: "Try one line of text")
.frame(maxWidth: .infinity, alignment: .leading)
.padding()
NaturalText(text: "تجربة سطر واحد من النص")
.frame(maxWidth: .infinity, alignment: .leading)
.padding()
Spacer()
}
}
.navigationTitle("Enligsh Layout")
.toolbar {
ToolbarItem(placement: .topBarLeading) {
Button(action: {
hideMe.toggle()
}, label: {
Text("hide")
})
}
}
}
}
}
في حال اردت ازالته من الصفحة اجعل remove بقيمة true في حال لا تريد ازالته اجعلها بقيمة false
لاحظ الفرق عند جعل قيمة reomve بقيمة true وايضا عند جعله بقيمة false
وايضا اذا كانت قيمة isHidden بقيمة false
الان نفس المثال السابق ولكن غيرت قيمة remove الى false
الحل هذا طلع بعد قراءة Documentation
ابل توضحلك انه استخدام hidden() يخفي الـ view لكن ماراح يختفي من هيكلة الـ View
بما يعني راح يؤثر في تصميم الـ view
وشرحي السابق يحل هذه المشكلة

