Saya telah membuat subkelas UINavigationBar untuk memiliki bilah navigasi khusus dalam aplikasi saya. Bilah ini digunakan kembali pada beberapa pengontrol tampilan dengan gaya tombol Menu yang sama dengan item tombol kiri, itulah sebabnya ia disubklasifikasikan.
Subkelas tersebut kemudian ditambahkan ke bilah navigasi Pengontrol Tampilan di storyboard.
Ini adalah kode dalam subkelas UINavigationBar
:
- (void)drawRect:(CGRect)rect
{
// Drawing code
UIImage *image = [[UIImage imageNamed: @"mainNavBar"] resizableImageWithCapInsets:UIEdgeInsetsMake(0,5,0,5)];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
-(void)awakeFromNib {
UIButton *leftButton = [[UIButton alloc]initWithFrame:CGRectMake(7.0f, 7.0f, 38.0f, 29.0f)];
[leftButton setImage:[UIImage imageNamed:@"menuBarItem"] forState:UIControlStateNormal];
[leftButton addTarget:nil action:@selector(menuItemPressed:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:leftButton];
}
Masalahnya adalah Rotasi Perangkat. Saya juga memiliki beberapa kode di appDidFinishLaunching
menggunakan API penampilan untuk pengaturan tambahan:
// Custom Navigation Bar appearance setup
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor,
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5],UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
UITextAttributeTextShadowOffset,nil]];
// Used to deal with the rotation of the nav bar when implemented outside of Navigation Controller
[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleHeight];
[[UINavigationBar appearance] setContentMode:UIViewContentModeScaleAspectFit];
// Used to push the title down slightly when in Landscape and NavBar outside of Navigation Controller
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:2 forBarMetrics:UIBarMetricsLandscapePhone];
Saat perangkat berputar, semuanya berfungsi dengan benar dalam hal penskalaan batang setinggi yang diharapkan dari 44 hingga 32 piksel. Namun, tombol-tombol tersebut masih muncul di luar bar.
Saya telah melihat beberapa postingan SO lainnya tentang ini, tetapi tidak tahu cara menyelesaikannya dengan benar: iPhone: UINavigationBar dengan tombol - sesuaikan ketinggian
UINavigationBar mengubah ukuran otomatis
Idealnya saya tidak ingin berurusan dengan rotasi otomatis di View Controller karena UINavigationBar ini digunakan kembali melalui VC dalam jumlah besar. Menambahkan kode rotasi otomatis berarti masing-masing VC berpotensi memerlukan ini juga?
EDIT - jawaban berikut Jika saya mengubah awakeFromNib
untuk menyertakan yang berikut:
UINavigationItem* ni = [[UINavigationItem alloc] initWithTitle:@"Test"];
UIImage *menuBgImage = [UIImage imageNamed:@"menuBarItem"];
UIBarButtonItem *b =[[UIBarButtonItem alloc] initWithImage:menuBgImage landscapeImagePhone:menuBgImage style:UIBarButtonItemStylePlain target:nil action:@selector(menuItemPressed:)];
ni.leftBarButtonItem = b;
self.items = @[ni];
Saya memiliki masalah UIBarButtonItemStylePlain yang merusak gambar:
Jika saya menyelesaikan pengaturan sebelumnya dengan initWithCustomView dan menggunakan leftButton dari kode aslinya. Dengan tombol kiri menggunakan ukuran otomatis untuk tinggi- saya kemudian mendapatkan gambar yang terentang buruk dalam lanskap?
EDIT 2 - Gambar tambahan per jawaban