масштабировать изображение в UIButton для AspectFit? - PullRequest
86 голосов
/ 08 января 2010

Я хочу добавить изображение в UIButton, а также хочу масштабировать мое изображение, чтобы оно соответствовало UIButton (уменьшить изображение). Пожалуйста, покажи мне, как это сделать.

Это то, что я пробовал, но это не работает:

  • Добавление изображения к кнопке и использование setContentMode:
[self.itemImageButton setImage:stretchImage forState:UIControlStateNormal];
[self.itemImageButton setContentMode:UIViewContentModeScaleAspectFit];
  • Создание "растянутого изображения":
UIImage *stretchImage = [updatedItem.thumbnail stretchableImageWithLeftCapWidth:0 topCapHeight:0];

Ответы [ 16 ]

3 голосов
/ 13 мая 2011

убедитесь, что для изображения установлено свойство Image, но не для фона

2 голосов
/ 17 февраля 2019

1 - очистить текст кнопки по умолчанию (важно)

2 - установить выравнивание как изображение

3 - установить режим содержимого как изображение

enter image description here

2 голосов
/ 14 сентября 2013

Фоновое изображение может быть довольно легко настроено на масштабирование. Просто нужно сделать что-то подобное в подклассе UIButton:

- (CGRect)backgroundRectForBounds:(CGRect)bounds
{
    // you'll need the original size of the image, you 
    // can save it from setBackgroundImage:forControlState
    return CGRectFitToFillRect(__original_image_frame_size__, bounds);
}

// Utility function, can be saved elsewhere
CGRect CGRectFitToFillRect( CGRect inRect, CGRect maxRect )
{
    CGFloat origRes = inRect.size.width / inRect.size.height;
    CGFloat newRes = maxRect.size.width / maxRect.size.height;

    CGRect retRect = maxRect;

    if (newRes < origRes)
    {
        retRect.size.width = inRect.size.width * maxRect.size.height / inRect.size.height;
        retRect.origin.x = roundf((maxRect.size.width - retRect.size.width) / 2);
    }
    else
    {
        retRect.size.height = inRect.size.height * maxRect.size.width / inRect.size.width;
        retRect.origin.y = roundf((maxRect.size.height - retRect.size.height) / 2);
    }

    return retRect;
}
0 голосов
/ 08 июня 2019

Swift 5.0

 myButton2.contentMode = .scaleAspectFit
 myButton2.contentHorizontalAlignment = .fill
 myButton2.contentVerticalAlignment = .fill
0 голосов
/ 25 октября 2016

Для Xamarin.iOS (C #):

    myButton.VerticalAlignment = UIControlContentVerticalAlignment.Fill;
    myButton.HorizontalAlignment = UIControlContentHorizontalAlignment.Fill;
    myButton.ImageView.ContentMode = UIViewContentMode.ScaleAspectFit;
0 голосов
/ 07 сентября 2011

Вам просто нужно установить режим просмотра изображений UIButton для трех событий. -

[cell.button setImage:[UIImage imageWithData:data] forState:UIControlStateNormal];

[cell.button setImage:[UIImage imageWithData:data] forState:UIControlStateHighlighted];

[cell.imgIcon setImage:[UIImage imageWithData:data] forState:UIControlStateSelected];

У нас есть код для трех событий bcoz при выделении или выборе, если размер кнопки - КВАДРАТНЫЙ, а размер изображения - прямоугольник, тогда на момент выделения или выбора будет отображаться квадратное изображение.

Я уверен, что это сработает для вас.

...