Установка изображения UIButton приводит к синей кнопке в iOS 7

В iOS 6 SDK я написал следующие строки кода для отображения изображения внутри кнопки:

NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"]; NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2]; UIImage *thumb2 = [UIImage imageWithData:thumbData2]; [btn2 setImage:thumb2 forState:UIControlStateNormal]; [self.view addSubview:btn2]; 

Но теперь с Xcode 5 и iOS 7 это не работает. Кнопка не содержит изображения. Кнопка заполнена синим цветом.

В iOS7 существует новый тип кнопки UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0), // стандартная системная кнопка

Проверьте свой .xib-файл и измените тип кнопки на Custom Посмотрите на изображение

Чтобы сделать это программно, добавьте эту строку в viewDidLoad :

 [UIButton buttonWithType:UIButtonTypeSystem]; 

Кажется, что iOS 7 использует изображение, представленное как альфа-маску для отображения цвета оттенка кнопки. Изменение типа кнопки на UIButtonTypeCustom сделало трюк для меня (спасибо user716216!). Установка изображения в качестве фона не всегда работает, если у вас уже есть фоновое изображение, как и в моем случае.

Есть хороший шанс, что изображение есть, и вы просто не можете его увидеть. Попробуйте изменить тип кнопки на UIButtonTypeCustom . Если это не работает, установите цвет фона кнопки на [UIColor clearColor];

Swift 3:

 let image = UIImage(named: "my-image") myButton.setImage(image.withRenderingMode(.alwaysOriginal), for: .normal) 

Проблема заключается в TintColor. По умолчанию iOS бросает синий цвет оттенка на каждую кнопку. Вы можете обойти это тремя способами.

  1. Измените цвет оттенка. [button setTintColor:[UIColor blackColor]]; Это может окрасить ваше изображение так, как вы этого не хотите.

  2. Как и большинство других, установите фоновое изображение. [button setBackgroundImage:[UIImage...]];

  3. Добавьте кнопку UIImageView к своей кнопке.

UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];

[button addSubView:img];

Для быстрого:

  let aButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton 

Я была такая же проблема. На моем раскадровке у меня была кнопка без изображения.

Затем я бы присвоил изображение в коде.

Пришел IOS 7, и у меня появилось много синих изображений.

Резолюция была простой, но сбивающей с толку. Если я назначу любое изображение на раскадровке, а затем изменим изображение во время выполнения, он отлично работает.

Вы всегда должны указывать начальный образ на раскадровке, даже если вы не собираетесь его использовать.

Это сработало для меня

 [myButton1 setBackgroundImage:[UIImage imageNamed:@"phones.png"] forState:UIControlStateNormal]; 

Примечание. Перед этим снимите переднее изображение.

Ни одно из данных решений не работало для меня. Если вы не установите начальное изображение в Storyboard, вы все равно можете изменить изображение кнопки, используя setBackgroundImage .

Для вашего примера необходимы только незначительные изменения.

 NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"]; NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2]; UIImage *thumb2 = [UIImage imageWithData:thumbData2]; [btn2 setBackgroundImage:thumb2 forState:UIControlStateNormal]; [self.view addSubview:btn2]; 

Эта проблема называется синей проблемой цвета кнопки в xcode. Когда мы делаем кнопку по коду, кнопка показывает синий цвет оттенка по умолчанию. Это можно решить, назначив цвет оттенка черному или белым в соответствии с цветом вашей ячейки. Код:

 UIImage *closebtnimg = [UIImage imageNamed:@"icon_uncheck.png"]; UIImage *closebtnimg1 = [UIImage imageNamed:@"icon_checked.png"]; Custombutton *button = [Custombutton buttonWithType:UIButtonTypeRoundedRect]; [button setFrame:CGRectMake(52, 66, 25, 24)]; [button setBackgroundImage:closebtnimg forState:UIControlStateNormal]; [button setBackgroundImage:closebtnimg1 forState:UIControlStateSelected]; [button setTintColor:[UIColor whiteColor]]; [cell.contentView addSubview:button]; [button addTarget:self action:@selector(changeImage:) forControlEvents:UIControlEventTouchUpInside]; 

Старая нить, но я хотел перезвонить, потому что у меня была такая же проблема. Проблема заключалась в том, что вы вызываете setImage, когда вы должны вызвать setBackgroundImage.

Используя Xcode 9.2, ни один из вышеперечисленных решений не работал для того, что я искал.

Я искал решение, которое позволит мне установить .normal и UIControlState изображения UIControlState внутри раскадровки для их исходного режима рендеринга , но внутри файла Swift не должно существовать строковых литералов относительно имен изображений.

В основном, внутри вашего кода вы получите изображение, которое вы установили внутри своей раскадровки, для .normal состояния и повторного отображения его как .alwaysOriginal (Same for .selected state), тогда вы установите это изображение (которое теперь отображается как оригинальное и не будет влиять на оттенок) для соответствующего состояния ( .normal и .normal ) вашего UIButton .

Вот:

 // Get your .normal image (you set via your storyboard) and render it as original let unselectedImage = yourButton.image(for: .normal)?.withRenderingMode(.alwaysOriginal) // Set your normal image but this time rendered as original yourButton.setImage(unselectedImage, for: .normal) // Same for selected state let selectedImage = yourButton.image(for: .selected)?.withRenderingMode(.alwaysOriginal) yourButton.setImage(selectedImage, for: .selected) 

Таким образом вы можете установить состояния изображения кнопок и, если имя изображения изменится, это не повлияет на ваш код.

делая цвет оттенка как clearcolor для всех четырех состояний (Default, Highlighted, selected, disabled) работал для меня.

  • iOS: изображение поворачивается на 90 gradleусов после сохранения в виде данных представления PNG
  • Как узнать размер изображения после применения аспектного соответствия для изображения в UIImageView
  • Могу ли я загрузить UIImage из URL-адреса?
  • didFinishPickingMediaWithInfo return nil фото
  • CGImage / UIImage ленивая загрузка на stream пользовательского интерфейса вызывает заикание
  • Как захватить UIView в UIImage без потери качества на дисплее сетчатки
  • Наложение UIImage с цветом?
  • Ошибка обнаружения PhotoPicker: Ошибка Домен = Код PlugInKit = 13
  • Как создать изображение из UILabel?
  • Ошибка обнаружения: поврежденные данные JPEG: преждевременный конец сегмента данных
  • Получить пиксельный цвет UIImage
  • Давайте будем гением компьютера.