2016-09-16 5 views
2

Я пытаюсь выяснить, как установить выпадающее изображение в черную рамку (граница только для удобства) в UIImageView с использованием resizableImageWithCapInsets:.resizableImageWithCapInsets: issues

Я использую AutoLayout, _imageView имеет фиксированное ограничение высоты

 UIImage *dropdown = [[UIImage imageNamed:@"dropdown.png"] 
         resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20, 0, 100)]; 
     _imageView.contentMode = UIViewContentModeScaleAspectFit; // modes see below 
     _imageView.clipsToBounds = NO; 
     _imageView.layer.borderWidth = 1; 
     _imageView.image = dropdown; 

UIViewContentModeTopLeft

top left

UIViewContentModeScaleToFill

scale to fill

UIViewContentModeScaleAspectFit

aspect fit

UIViewContentModeScaleAspectFill

aspect fill

Редактировать

Я попытался установить верхние и нижние врезки в соответствии с рекомендациями @Rahul и то, что я получаю сейчас, если установку UIViewContentModeScaleToFill (аналогично приводит к другим режимам). Как вы можете заметить, белая стрелка вниз в сместились немного вниз

UIImage *dropdown = [[UIImage imageNamed:@"dropdown.png"] 
         resizableImageWithCapInsets:UIEdgeInsetsMake(8, 20, 8, 100)]; 

other pic

Edit 2

Изменение смещения, кажется, не поможет здесь, проблема, кажется, в вертикальном масштабировании , как если бы по какой-либо причине изображение не отображало только одно вертикальное смещение, не оба, поэтому мы получаем несимметричное смещение по вертикали

Редактировать 3

Пример проекта на GitHub: ScaleTest-iOS

Edit 4

Обновлен пример GitHub с настраиваемыми изменения размера методов (не помогло, хотя), созданный topic на Apple, Dev Forum

Edit 5

Принятый ответ Я вижу, как обходной путь, действительно я бы предпочел чтобы сохранить фиксированную высоту, но это кажется невозможным. Во всяком случае, спасибо @Rahul за помощь.

+0

Я в замешательстве - разве вы не ответили на свой вопрос во втором изображении? EDIT: Я вижу сейчас. Дно усечено. Не обращай на меня внимания. – Shadow

ответ

1

См этот учебник: How To Make A Stretchable Button With UIEdgeInsetsMake для UIEdgeInsetsMake(8, 8, 8, 8) & применять подходящие края врезки для изображения ....

UIImage *image = [[UIImage imageNamed:@"dropdown"] resizableImageWithCapInsets:UIEdgeInsetsMake(8, 20, 8, 100)]; 
_imageView4.layer.borderWidth = 1.0; 
_imageView4.clipsToBounds = NO; 
_imageView4.contentMode = UIViewContentModeScaleToFill; 
_imageView4.image = image; 

Установите высоту 35 imageview4 вместо 40 пикселей & то работает идеально ...

enter image description here

+0

Пожалуйста, ознакомьтесь с моим обновленным вопросом – schmidt9

+0

Попробуйте это UIEdgeInsetsMake (8, 8, 8, 100) ..... – Rahul

+0

Я пробовал, все напрасно, проблема, похоже, в вертикальном масштабировании изображения, не знаю, почему изображение меняет масштаб изображение так странно – schmidt9

0
_imageView.contentMode = UIViewContentModeScaleAspectFit; 
_imageView.layer.cornerRadius = 20; // Apply your required value. 
_imageView.layer.masksToBounds = YES; 
+0

Спасибо, но это не то, что я хочу, это не помогает вместить изображение в рамки – schmidt9

+0

Тогда извините, я не понял ваш вопрос. :-) – shuvo

0

попробовать этот UIEdgeInsetsMake (8, 100, 8, 8); используйте 20px, если ваша кривая границы изображения имеет радиус 20px

+0

20 слишком много, стрелка искажается – schmidt9

+0

обновленный код, так как кажется, что ваш радиус границы составляет около 8 пикселей, а если стрелка вправо со шрифтом Брауна составляет 100 пикселей, тогда используйте 100. и не нужно stratched, поэтому его 100. – shavik

+0

вставки слева и справа в порядке, см. мой обновленный вопрос, верхняя и нижняя вставки 8 (или что-то еще) приводят к смещению стрелки вниз – schmidt9