Я вижу очень сложные ответы, все они с использованием кода. Однако, если вы используете Interface Builder , есть очень простой способ сделать это:
Выберите кнопку и установите заголовок и изображение. Обратите внимание, что если вы установите фон вместо изображения, тогда изображение будет изменено, если оно меньше, чем кнопка.
Установите положение обоих элементов, изменив край и вставки. Вы даже можете контролировать выравнивание обоих в разделе Control.
Вы даже можете использовать тот же подход с помощью кода, не создавая внутри UILabels и UIImages, как предлагают другие решения. Всегда будьте проще!
РЕДАКТИРОВАТЬ: прикрепил небольшой пример, в котором установлены 3 вещи (заголовок, изображение и фон) с правильными вставками
Это верно. Вы захотите использовать краевые вставки в заголовке и изображении, чтобы правильно выровнять их. Вы можете сделать это в коде, задав свойства titleEdgeInsets и contentEdgeInsets.
Тим Махони
4
да, это почти правильно. просто вам нужно установить Backgroundизображение вместо Image, иначе вы не увидите заголовок, даже не установив значения вставки для изменения положения заголовка.
holex 09
6
У меня тоже были проблемы с этим. Если ваш заголовок не отображается, попробуйте установить для него отрицательное смещение влево. Похоже, IB автоматически выталкивает его вправо от изображения.
brians 02
8
Это только отображает изображение и текст рядом, верно? Есть ли способ изменить ориентацию сверху вниз? Это то, что говорится в исходном вопросе, и то, что я ищу. Спасибо!
flohei 09
12
Для тех, кто использует Xcode 8, вы можете не увидеть свойство Edge. Текст может исчезнуть и после добавления изображения. Он меняет текст на белый, и если вы находитесь на белом фоне, похоже, что он исчез. Измените цвет текста, и он появится рядом с изображением. Вы можете настроить вкладки в Инспекторе размеров.
Мика Монтойя
67
Думаю, вы ищете решение своей проблемы:
UIButton*_button =[UIButton buttonWithType:UIButtonTypeCustom];[_button setFrame:CGRectMake(0.f,0.f,128.f,128.f)];// SET the values for your wishes[_button setCenter:CGPointMake(128.f,128.f)];// SET the values for your wishes[_button setClipsToBounds:false];[_button setBackgroundImage:[UIImage imageNamed:@"jquery-mobile-icon.png"] forState:UIControlStateNormal];// SET the image name for your wishes[_button setTitle:@"Button" forState:UIControlStateNormal];[_button.titleLabel setFont:[UIFont systemFontOfSize:24.f]];[_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];// SET the colour for your wishes[_button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];// SET the colour for your wishes[_button setTitleEdgeInsets:UIEdgeInsetsMake(0.f,0.f,-110.f,0.f)];// SET the values for your wishes[_button addTarget:self action:@selector(buttonTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside];// you can ADD the action to the button as well like
... остальная часть настройки кнопки - ваша обязанность, и не забудьте добавить кнопку в свое представление.
ОБНОВЛЕНИЕ №1 и ОБНОВЛЕНИЕ №2
или, если вам не нужна динамическая кнопка, вы можете добавить свою кнопку в свое представление в Интерфейсном Разработчике, и вы также можете установить там те же значения. он почти такой же, но вот и эта версия на одной простой картинке.
вы также можете увидеть окончательный результат в Интерфейсном Разработчике, как на скриншоте.
EdgeInsets работает только тогда, когда у вас есть «установить изображение кнопки» и когда вы устанавливаете изображение кнопки, вы не видите заголовок. И если вы установите фоновое изображение, то EdgeInsets не может применяться к изображению. и вы можете увидеть заголовок. Таким образом, вы не можете установить edgeinsect для обоих одновременно.
Бадал Шах
@BadalShah, да, есть несколько сценариев (в зависимости от размера кнопки, размера изображения, длины заголовка и т. Д.), Когда то, что вы сказали, верно, и вы не можете видеть заголовок и изображение одновременно, потому что изображение выталкивает заголовок видимой области; но этот сценарий совсем не общий, общая ситуация такова, что и заголовок, и изображение могут появиться и появятся одновременно.
holex 03
32
Xcode-9 и Xcode-10 Apple внесла несколько изменений в Edge Inset, вы можете изменить это в инспекторе размеров.
Пожалуйста, выполните следующие шаги:
Шаг 1:
Введите текст и выберите изображение, которое вы хотите показать:
Шаг 2:
Выберите кнопку управления в соответствии с вашими требованиями, как показано на рисунке ниже:
Шаг 3:
Теперь перейдите к инспектору размеров и добавьте стоимость в соответствии с вашими требованиями:
Мне нужно разместить изображение вверху, а текст под изображением должны быть интерактивными.
Codesen
4
Используйте этот код:
UIButton*button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
button.imageView.frame=CGRectMake(0.0f,0.0f,50.0f,44.0f);///You can replace it with your own dimensions.UILabel*label=[[UILabel alloc] initWithFrame:CGRectMake(0.0f,35.0f,50.0f,44.0f)];///You can replace it with your own dimensions.[button addSubview:label];
Я думаю, что ответ Ангела Гарсиа Оллоки - еще одно хорошее решение, если вы разместите их все вручную с помощью конструктора интерфейса, но я сохраню свое решение, поскольку мне не нужно изменять вставки содержимого для каждой моей кнопки.
Ответы:
Я вижу очень сложные ответы, все они с использованием кода. Однако, если вы используете Interface Builder , есть очень простой способ сделать это:
Вы даже можете использовать тот же подход с помощью кода, не создавая внутри UILabels и UIImages, как предлагают другие решения. Всегда будьте проще!
РЕДАКТИРОВАТЬ: прикрепил небольшой пример, в котором установлены 3 вещи (заголовок, изображение и фон) с правильными вставками
источник
Background
изображение вместоImage
, иначе вы не увидите заголовок, даже не установив значения вставки для изменения положения заголовка.Думаю, вы ищете решение своей проблемы:
... остальная часть настройки кнопки - ваша обязанность, и не забудьте добавить кнопку в свое представление.
ОБНОВЛЕНИЕ №1 и ОБНОВЛЕНИЕ №2
или, если вам не нужна динамическая кнопка, вы можете добавить свою кнопку в свое представление в Интерфейсном Разработчике, и вы также можете установить там те же значения. он почти такой же, но вот и эта версия на одной простой картинке.
вы также можете увидеть окончательный результат в Интерфейсном Разработчике, как на скриншоте.
источник
Xcode-9 и Xcode-10 Apple внесла несколько изменений в Edge Inset, вы можете изменить это в инспекторе размеров.
Пожалуйста, выполните следующие шаги:
Шаг 1: Введите текст и выберите изображение, которое вы хотите показать:
Шаг 2: Выберите кнопку управления в соответствии с вашими требованиями, как показано на рисунке ниже:
Шаг 3: Теперь перейдите к инспектору размеров и добавьте стоимость в соответствии с вашими требованиями:
источник
но следующий код покажет метку выше и изображение в фоновом режиме
Нет необходимости использовать метку и кнопку в одном элементе управления, поскольку UIButton имеет свойства UILabel и UIimageview.
источник
Используйте этот код:
источник
Используйте этот код:
источник
Я столкнулся с той же проблемой, и я исправил ее, создав новый подкласс
UIButton
и переопределивlayoutSubviews:
метод, как показано ниже:Я думаю, что ответ Ангела Гарсиа Оллоки - еще одно хорошее решение, если вы разместите их все вручную с помощью конструктора интерфейса, но я сохраню свое решение, поскольку мне не нужно изменять вставки содержимого для каждой моей кнопки.
источник
Создайте
UIImageView
иUILabel
, и установите изображение и текст для обоих из них .... затем поместите настраиваемую кнопку над imageView и Label ....источник
Вы должны создать собственное изображение для изображения и настраиваемую метку для текста и добавить к своей кнопке как подпредставления. Вот и все.
Для целей тестирования используйте
yourButtonSelected:
методЯ думаю, это будет вам полезно.
источник
Это действительно просто, просто добавьте изображение к фону вашей кнопки и дайте текст заголовку кнопки для uicontrolstatenormal. Вот и все.
источник
быстрая версия:
источник