سؤال

أحتاج إلى فهم كيفية تعريض NSView عرض وجهات النظر. لقد قمت بتعيين كل شيء في IB وتغيير حجم المفتوين الفرعي بشكل جيد (عندما أتعديل نافذتي حول الماوس). ومع ذلك، إذا كنت أفعل [myMainView setFrame:] مع الإطار الجديد الخاص بي، لا يحدث شيء. لا تزال جميع وجهات نظري الفرعية الحجم الأصلي (على الرغم من أن العرض الرئيسي لديه الأبعاد الصحيحة). الطفل resizeWithOldSuperviewSize: يحصل دعا، لكنه لا يزال غير مناسب بشكل مناسب.

لدي شاشة مليئة بعناصر الكاكاو على الشاشة (شاشة # 1)، التسمية، الصورة، الفيديو. هناك تخطيط محدد جيدا لهذه العناصر. لقد قمت بإعداد السلوك التلقائي عبر باني واجهة يعمل بشكل جيد للغاية. تغيير حجم النافذة الرئيسية لتغيير حجم العناصر بطريقة مرضية.

الآن، يقوم المستخدم بالنقر فوق الزر "التالي"، حيث يتم رسم الشاشة الثانية من العناصر (الشاشة رقم 2). تم تصميم تخطيطاتي بناء على شاشات صدر قانونية (قل، 800 × 600). ولكن الآن النافذة أكبر (أو أصغر) لأنه تم تغيير حجمه في الشاشة رقم 1. لذا فإن العناصر تتخذ الآن منطقة صغيرة فقط في النافذة، بدلا من أن تكون بحجمها بشكل مناسب لملء المساحة المتاحة. أريد أن أوسع هذه العناصر.

هل أسيء فهم كيفية عمل التلقائي؟ كيف يمكنني تشغيل الآلات التلقائية تحت NSView يدويا؟

هناك شيئان يمكنني القيام به:

  1. تغيير حجم العناصر يدويا على حجم الشاشة الحالية نسبة إلى الحجم الأصلي. هذا الخيار ليس المفضل لدي لأنه على ما يبدو، أجبر على إعادة كتابة التعليمات البرمجية التي تعمل بالفعل في NSView (السلوك التلقائي
  2. خياري الثاني هو استدعاء السحر التلقائي NSView المذكور أعلاه. الوثائق تنطوي على أن [NSView SetFrame:] سوف تفعل ذلك بالنسبة لي. ما جربته هو، تغيير حجم عرض المحتوى الخاص بي إلى الشاشة الأصلية (800 × 600)، وجعل عناصري ثم تغيير حجمها إلى حجم النافذة الحالي. من الناحية النظرية، ألا تكون متطابقة لتغيير حجم النافذة يدويا؟ يبدو أن لا يكون. مرة أخرى، هذا الخيار هو الأفضل لأنه يقلل من مقدار التعليمات البرمجية التي تتم كتابةها والحفاظ عليها.
هل كانت مفيدة؟

المحلول 2

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

نصائح أخرى

هذا الرمز

NSView* superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
NSView* subView   = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
[superView addSubview:subView];

[superView setAutoresizesSubviews:YES];
[subView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

NSLog(@"subview's frame before resizing: %@", NSStringFromRect([subView frame]));
[superView setFrame:NSMakeRect(0, 0, 200, 100)];
NSLog(@"subview's frame after  resizing: %@", NSStringFromRect([subView frame]));

هل تعطي النتيجة المتوقعة:

...] إطار فرعي قبل تغيير حجم: {{0، 0}، {100، 100}} [...] إطار فرعي بعد تغيير حجمه: {{0، 0}، {200، 100}}

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

قد يكون الحل الجيد لمشكلتك هو استخدام nstabview بدون علامات تبويب، لأنه ثم جميع وجهات نظرك في جميع الأوقات في النافذة (ربما تكون مخفية) و tabview يعتني بالتغيير حجم.

حل آخر هو وضع عدة آراء حول قمة بعضها البعض واستخدامها setHidden: لإظهار واحد فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top