ios - televisor - configurar imagen smart tv philips
configuraciĆ³n de imagen para UIBarButtonItem-imagen estirada (6)
Establezca el tamaño de imagen correcto: @ 1x = 22px, @ 2x = 44px @ 3x = 88px en primer lugar.
Entonces
let leftBarButtonItem = UIBarButtonItem(image: yourUIImage, style: .plain, target: self, action: #selector(action))
leftBarButtonItem.tintColor = UIColor.red
navigationItem.leftBarButtonItem = leftBarButtonItem
o
let btn = UIButton(type: .custom)
btn.addTarget(self, action: #selector(contactMe), for: .touchUpInside)
btn.setImage(#imageLiteral(resourceName: "open"), for: .normal)
Cuando trato de usar "initWithImage" de UIBarButtonItem para inicializar una imagen personalizada de la barra de navegación, sale lavada y estirada contra una barra de navegación negra. Así es como lo creo:
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"gear.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(showSetting:)];
Esto es lo que parece:
¿Alguna idea de si es un problema con la imagen? Lo obtuve de un conjunto de iconos que compré.
La mejor manera de hacerlo es crear un botón, establecer su imagen de fondo y establecer su acción. Luego se puede crear un UIBarButtonItem usando este botón como la vista personalizada. Aquí está mi código de ejemplo:
UIButton *settingsView = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 61, 30)];
[settingsView addTarget:self action:@selector(SettingsClicked) forControlEvents:UIControlEventTouchUpInside];
[settingsView setBackgroundImage:[UIImage imageNamed:@"settings"] forState:UIControlStateNormal];
UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithCustomView:settingsView];
[self.navigationItem setRightBarButtonItem:settingsButton];
Las imágenes mostradas en los elementos de los botones de la barra se derivan de la imagen de origen (usa solo los valores del canal alfa en la representación, pero todo se ve bien en su imagen). Es posible que no sea del tamaño correcto: es posible que necesite abrir el archivo de imagen y recortarlo al tamaño correcto.
También puede intentar ver si la configuración de la propiedad imageInsets (heredada por UIBarButtonItem de UIBarItem ) se puede usar para ajustar el tamaño de una manera que impida que se estire.
Doco en la barra de imágenes del artículo dice lo siguiente:
Las imágenes que se muestran en la barra se derivan de esta imagen. Si esta imagen es demasiado grande para caber en la barra, se escala para adaptarse. Normalmente, el tamaño de una barra de herramientas y la imagen de la barra de navegación es de 20 x 20 puntos.
Para aquellos que se han encontrado con este tema de la extensión de la barra de herramientas en iOS 11 específicamente, parece que ahora se requiere la versión @ 2x de su imagen para representar su marco y / o límites.
Entonces, si tiene un código como este donde está agregando una imagen personalizada UIBarButtonItem como esta:
UIButton *tagsBtn = [UIButton buttonWithType:UIButtonTypeCustom];
tagsBtn.bounds = CGRectMake( 0, 0, 40, 40);
[tagsBtn setImage:[UIImage imageNamed:@"tags.png"] forState:UIControlStateNormal];
tags = [[UIBarButtonItem alloc] initWithCustomView:tagsBtn];
[tagsBtn addTarget:self action:@selector(tags:) forControlEvents:UIControlEventTouchUpInside];
[bottomToolbar setItems:[NSArray arrayWithObjects:flexibleSpace,tags,flexibleSpace,nil]];
Entonces necesitarás tener un [email protected] que sea 80x80, incluso si tu imagen tags.png es 80x80. Simplemente cambiando el nombre de tags.png a [email protected] cambiaría el tamaño de la imagen a 40x40 como lo hacía antes de iOS 11 sin cambiar el código, o simplemente agregaría [email protected] a tu proyecto.
Sé que esta pregunta ya tiene un anser marcado. Pero me encontré con esto hoy y pensé que iba a ofrecer mi respuesta de todos modos. El cheque marcado como respuesta anterior me ayudó, pero también tomó un poco de experimentación extra para averiguar qué estaba sucediendo realmente.
La imagen del botón se está reduciendo solo en el eje x y no en la y. esto se debe a que es demasiado alto para el botón y lo encoge para ajustarlo. Pero no lo reduce proporcionalmente. Sólo en la vertical. Por lo que parece estirado. En realidad no está estirado, lo que implica una ampliación de la misma. En cambio, la altura se reduce. Sabiendo la diferencia, creo que es importante para entender por qué está sucediendo y cómo solucionarlo.
Hice lo mismo que el OP. Pensando que estoy apoyando la retina, hice mi icono 40x40. El mío era una marca de verificación verde con un canal alfa. Se rellenó con píxeles en blanco para ser 40x40. La aplicación lo redimensionó para ajustarse a la altura disponible del botón. Pero el ancho se mantuvo igual. Así que se convirtió en algún lugar en el rango de 40x30 o 40x20. Creo que el botón puede manejar un icono 30 alto, pero luego es un poco demasiado grande para el cuadro IMHO.
El OP redujo el botón a 30x30 y eso no lo aplastó más. Pero esa no es la mejor solución. Porque no es realmente un botón de retina cuando haces eso. Se contrae y luego vuelve a volar en la retina.
La respuesta correcta es nombrar su versión de 40 píxeles de altura con @ 2x y luego hacer una versión de medio tamaño (20 píxeles de altura) y guardarla sin la @ 2x. El ancho puede ser lo que sea. Luego cargue con imageNamed: sin especificar el @ 2x. Utilizará el png apropiado para un dispositivo de retina o no retina.
Lo siguiente que me pasó fue que el marco del botón era demasiado pequeño. Así que aumenté el tamaño de mi lienzo en psd para rellenar el png a 80 de ancho para hacer que el botón sea un poco más ancho y más fácil de tocar.
Tengo el mismo problema extendido para mi imagen de 40x40 cuando configuro la imagen de fondo para leftBarButtonItem
UIBarButtonItem *backButton = [UIBarButtonItem new];
[backButton setBackButtonBackgroundImage:[UIImage imageNamed:@"back_icon"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
self.navigationItem.leftBarButtonItem = backButton;
Pero mi problema se resolvió con el siguiente código
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_icon"] style:UIBarButtonItemStylePlain target:self action:@selector(handleBack:)];
self.navigationItem.leftBarButtonItem = backButton;
y el mismo resultado si se usa UIBarButtonItemStyleBordered .