سؤال

أقوم بإضافة خلفية مخصصة لـ UINavigationBar الخاص بي.يعمل بشكل جيد طالما أن الهاتف في الوضع الرأسي.بمجرد التبديل إلى الوضع الأفقي، يظهر نصف الشريط باللون الأزرق (لون شريط التنقل الافتراضي) ويحتوي النصف الآخر على صورتي

كيف يمكنني تمديد الصورة للوضع الأفقي وجعلها صغيرة مرة أخرى للوضع الرأسي؟

شكرًا

حل
إذا كان أي شخص يبحث عن إجابة لكيفية إضافة صورة إلى شريط التنقل - فإليك هذا

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 480.0, 44.0)];
[imgView setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"navbar_landscape" ofType:@"png"]]];
[navigationController.navigationBar addSubview:imgView];
[imgView release];
هل كانت مفيدة؟

المحلول

ربما تحتاج إلى تعيين قناع تغيير الحجم التلقائي لعرض صورة الخلفية الخاصة بك؛جرب استخدام UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight

نصائح أخرى

في كلا وضعي توجيه الشاشة يكون الاستخدام أفضل بكثير

[navigationController.navigationBar insertSubview:imgView atIndex:0];

يؤدي هذا إلى وضع عرض الصورة ضمن جميع طرق العرض الأخرى وجميع عناصر شريط التنقل الافتراضية (العنوان والأزرار القياسية) تعمل بشكل جيد.

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

http://developer.apple.com/iphone/library/qa/qa2009/qa1637.html

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    if([self isMemberOfClass: [UINavigationBar class]]){
        UIImage *image = [UIImage imageNamed:@"navBarBackground.png"];
        CGContextClip(ctx);
        CGContextTranslateCTM(ctx, 0, image.size.height);
        CGContextScaleCTM(ctx, 1.0, -1.0);
        CGContextDrawImage(ctx, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
    }else{
        [super drawLayer:layer inContext:ctx];
    }
}

@end

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

يمكنك تغيير الصورة لكل من الاتجاهين الرأسي والأفقي من خلال توفير صور مختلفة لاتجاهات مختلفة عن طريق التحقق من حجم الإطار لمثيل شريط UINavigation:

- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
    if ([self isMemberOfClass:[UINavigationBar class]] == NO) {
        return;
    }

    UIImage *image = (self.frame.size.width > 320) ?
                        [UINavigationBar bgImageLandscape] : [UINavigationBar bgImagePortrait];
    CGContextClip(context);
    CGContextTranslateCTM(context, 0, image.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextDrawImage(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
}

و هذا المشروع التجريبي Xcode الكامل قد يكون من المفيد تخصيص مظهر UINavigationBar.ويتضمن أيضًا إصدارات @2x من صور الخلفية لدعم شاشات Retina على أجهزة iPhone 4.

جرب الطريقة الأبسط [UIImage imageNamed:@"navbar_landscape.png"] نظرًا لأن عنصر واجهة المستخدم هو بالضبط ما اسم الصورة: المقصود، كما يظهر ljonesATL.

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