Как скруглить углы кнопки


182

У меня есть изображение прямоугольника (jpg) и я хочу использовать его, чтобы залить фон кнопки закругленным углом в xcode.

Я написал следующее:

UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
CGRect frame = CGRectMake(x, y, cardWidth, cardHeight);
button.frame = frame;
[button setBackgroundImage:backImage forState:UIControlStateNormal];

Тем не менее, кнопка, которую я получаю при таком подходе, не имеет закругленных углов: вместо этого это простой прямоугольник, который выглядит точно так же, как мое исходное изображение. Как я могу получить вместо этого изображение с закругленным углом для представления моей кнопки?

Спасибо!

Ответы:


436

Я думаю, что у вас есть проблема, я попробовал следующее решение с UITextArea, и я полагаю, что это будет работать и с UIButton.

прежде всего импортируйте это в ваш файл .m -

#import <QuartzCore/QuartzCore.h>

а затем в вашем loadViewметоде добавить следующие строки

    yourButton.layer.cornerRadius = 10; // this value vary as per your desire
    yourButton.clipsToBounds = YES;

Надеюсь, что это работает для вас, и если да, общайтесь.


6
Также работает с инспектором «Определенные пользователем атрибуты времени выполнения»
Ави Черри

Работает и для Swift! Просто измените ДА на истинное.
Эндрю Томас

119

Вы можете достичь с помощью этих атрибутов RunTime

введите описание изображения здесь

Мы можем сделать пользовательскую кнопку. Просто смотрите прикрепленный скриншот.

пожалуйста, обратите внимание:

в атрибутах времени выполнения для изменения цвета рамки следуйте этой инструкции

  1. создать категорию класса CALayer

  2. в файле h

    @property(nonatomic, assign) UIColor* borderIBColor;
  3. в м файле:

    -(void)setBorderIBColor:(UIColor*)color {
        self.borderColor = color.CGColor;
    }
    
    -(UIColor*)borderIBColor {
        return [UIColor colorWithCGColor:self.borderColor];
    }

теперь можно установить скриншот проверки цвета рамки

обновленный ответ

Спасибо


4
Только я или информация в ответе неполная? Это на самом деле не работает. Обновление: работает, пока я не уточняю borderColor. Но тогда он всегда использует черный для borderColor.
Джонни

3
Расширенный ответ: Цвет, установленный в IB, вероятно, имеет тип UIColor, который не работает с borderColor, который имеет CGColorRef. Или что-то вроде того. Таким образом, решение состоит в том, чтобы создать категорию на CALayer, с чем-то вроде @property(nonatomic, assign) UIColor* borderIBColor;(который не конфликтует с каким-либо другим именем) в заголовочном файле, и реализация:-(void)setBorderIBColor:(UIColor*)color{self.borderColor = color.CGColor;} -(UIColor*)borderIBColor{return [UIColorcolorWithCGColor:self.borderColor];}
Джонни

1
Если вам не нужен цвет границы, установите для borderRadius значение 0, и у вас его не будет!
jungledev

Как насчет Свифта?
Джайпракаш Дубей

1
@JayprakashDubey я создаю расширение CALayer.
Крутарт Патель

14

Вы можете проверить мою библиотеку под названием DCKit . Это написано на последней версии Swift .

Вы сможете создать кнопку / текстовое поле с закругленными углами непосредственно из Интерфейсного конструктора:

DCKit: закругленная кнопка

Он также имеет много других интересных функций, таких как текстовые поля с проверкой, элементы управления с границами, пунктирные границы, круговые и линии роста волос и т. Д.


11

Нажимаем на предел радиуса угла вверх, чтобы получить круг:

    self.btnFoldButton.layer.cornerRadius = self.btnFoldButton.frame.height/2.0;

введите описание изображения здесь

Если рамка кнопки имеет квадратную форму, это не имеет значения frame.height или frame.width. В противном случае используйте самый большой из обоих.


7

Импортируйте каркас QuartCore, если его нет в существующем проекте, а затем импортируйте #import <QuartzCore/QuartzCore.h>в viewcontroller.m

UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect]];
CGRect frame = CGRectMake(x, y, width, height); // set values as per your requirement
button.layer.cornerRadius = 10;
button.clipsToBounds = YES;

6
UIButton* closeBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, 50, 90, 35)];
//Customise this button as you wish then
closeBtn.layer.cornerRadius = 10;
closeBtn.layer.masksToBounds = YES;//Important

4

Первый набор ширины = 100 и высоты = 100 кнопки

Цель C Решение

YourBtn1.layer.cornerRadius=YourBtn1.Frame.size.width/2;
YourBtn1.layer.borderColor=[uicolor blackColor].CGColor;
YourBtn1.layer.borderWidth=1.0f;

Swift 4 Solution

YourBtn1.layer.cornerRadius = YourBtn1.Frame.size.width/2
YourBtn1.layer.borderColor = UIColor.black.cgColor
YourBtn1.layer.borderWidth = 1.0

2

Если вы хотите закругленный угол только до одного угла или двух углов и т. Д., Прочитайте этот пост:

[ObjC] - Кнопка UIB с закругленным углом - http://goo.gl/kfzvKP

Это подкласс XIB / раскадровки. Импорт и установка границ без написания кода.



2

обновлено для Swift 3:

Используемый ниже код, чтобы сделать угол UIButton круглым:

 yourButtonOutletName.layer.cornerRadius = 0.3 *
        yourButtonOutletName.frame.size.height

2

Попробуйте мой код. Здесь вы можете установить все свойства UIButton, такие как цвет текста, цвет фона, радиус угла и т. Д.

extension UIButton {
    func btnCorner() {
        layer.cornerRadius = 10
        clipsToBounds = true
        backgroundColor = .blue
    }
}

Теперь звоните вот так

yourBtnName.btnCorner()




0

Swift 4 Обновление

Я также перепробовал много вариантов, но не смог получить угол UIButton. Я добавил код радиуса угла в viewDidLayoutSubviews()решенную проблему.

func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        anyButton.layer.cornerRadius = anyButton.frame.height / 2
    }

Также мы можем настроить cornerRadius следующим образом

func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        anyButton.layer.cornerRadius = 10 //Any suitable number as you prefer can be applied 
    }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.