Вертикальный текст в горизонтальной UIButton

используя вертикальную кнопку UIB в портретном приложении (обычная кнопка шириной 60 и высотой 160)

Я хочу поставить ярлык Vetically вниз на кнопку, а не через нее.

Когда я использую следующий код для поворота метки

    [workPackageButton.titleLabel setTransform:CGAffineTransformMakeRotation(M_PI / 2)];

Он поворачивает метку, но длина кажется ограниченной исходной шириной, поэтому я получаю ... сокращение в середине. Есть ли простой способ обойти это?

 Matt25 авг. 2014 г., 23:47
Смотрите ответ ниже, используя подкласс.

Ответы на вопрос(5)

Решение Вопроса

как показано ниже:

UILabel *lbl= [[UILabel alloc] initWithFrame:CGRectMake(button.frame.size.width*.3, button.frame.size.height*.5, button.frame.size.width,button.frame.size.height)];
lbl.transform = CGAffineTransformMakeRotation(M_PI / 2);
lbl.textColor =[UIColor whiteColor];
lbl.backgroundColor =[UIColor clearColor];
[button addSubview:lbl];
 ArQangel05 нояб. 2012 г., 15:40
Спасибо, это прекрасно работает. (Хотя я застрял с M_PI / 2) Приветствия за помощь. :)
 ilhnctn05 нояб. 2012 г., 12:25
я пытался, но значения кадра не совпадают, я пытался CGRectMake (0, 0, button.frame.size.height, button.frame.size.weight) он остается ближе, чем раньше ..
 ilhnctn05 нояб. 2012 г., 12:58
Я просто удивился, так что попробовал, все равно спасибо :)
 Nookaraju05 нояб. 2012 г., 12:22
да, мы можем, это сработало для меня. @ ilis
 ArQangel06 нояб. 2012 г., 13:03
Обновление: это работало в первый раз, когда я его использую. Но во второй раз, когда я его использую, я получаю внутреннюю ошибку несоответствия с AutoLayout ----- >> NSInternalInconsistencyException»Причина:Autolayout не делает• Поддержка пересечения границ вращения с такими ограничениями макета, как справа, слева, сверху, снизу. Вид оскорбления: ----- <<  И когда я отключаю параметры AutoLayout в раскадровке. Мой оригинальный код работает просто отлично ... Так что теперь яЯ потерян. Но это всего лишь обновление, если кто-то окажется в том же месте ..... ArQ
 ilhnctn05 нояб. 2012 г., 12:15
когда вы это сделаете, будет ли возможно взаимодействовать с кнопкой?
 Nookaraju05 нояб. 2012 г., 12:40
На самом деле я так и использовал. lblC = [[UILabel alloc] initWithFrame: CGRectMake (button.frame.size.width * .39, button.frame.size.height * .50, button.frame.size.width * .7, button.frame.size. высота / 5)]; lblC.backgroundColor = [UIColor yellowColor]; lblC.transform = CGAffineTransformMakeRotation (степеньToRadian (38)); [кнопка addSubview: lblC];

ибутов:

Тип: ПользовательскийНазвание: Приписывается

Затем выберите левое / среднее / правое или выравнивание по ширине. Не использовать 'Выровнять натуральный.

Сейчас

[workPackageButton.titleLabel setTransform:CGAffineTransformMakeRotation(M_PI / 2)];

работает, как и ожидалось, с ярлыком, не сокращенным (но всегда выровненным по центру ...).

Протестировано с XCode 6.3.

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

@interface RotatingButton : UIButton

@end


@implementation RotatingButton

- (CGRect) titleRectForContentRect:(CGRect)bounds {
    CGRect frame = [super titleRectForContentRect:bounds];

    frame.origin.y -= (frame.size.width - frame.size.height) / 2;
    frame.size.height = frame.size.width;

    return frame;
}

@end

Метка любого RotatingButton, созданного в коде или на раскадровке, может вращаться без усечения.

[button.titleLabel setTransform:CGAffineTransformMakeRotation(M_PI / 2)];
 dev_m13 авг. 2017 г., 20:15
я использовал это для полноразмерной метки в моей кнопке frame.origin.y = 0 frame.size.height = self.bounds.size.height;

для кнопок в представлении стека, поэтому мне нужно что-то динамическое

для Swift 4.2

class VerticalButton: UIButton {

    override func titleRect(forContentRect bounds: CGRect) -> CGRect {
        var frame: CGRect = super.titleRect(forContentRect: bounds)

        frame.origin.y = 0
        frame.size.height = bounds.size.height

        return frame
    }
}
extension UILabel {
    @IBInspectable
    var rotation: Int {
        get {
            return 0
        } set {
            let radians = CGFloat(CGFloat(Double.pi) * CGFloat(newValue) / CGFloat(180.0))
            self.transform = CGAffineTransform(rotationAngle: radians)
        }
    }
}

а также

    let button = VerticalButton.init(type: UIButton.ButtonType.custom)
    button.titleLabel?.textAlignment = .center
    button.titleLabel?.rotation = -90
 adeline_t08 мар. 2019 г., 16:32
Я добавляю ту же проблему в swift, и мне потребовалось много времени, чтобы найти это решение. Поворот метки на кнопке может быть хитрым
 jtate08 мар. 2019 г., 16:26
Добро пожаловать в stackoverflow. В дополнение к ответу выпредоставьте, пожалуйста, предоставьте краткое объяснение, почему и как это решает проблему.

но пытались ли вы создать кнопку в виде горизонтальной кнопки (160 Вт x 60 часов), а затем вращать всю кнопку?

 ArQangel06 нояб. 2012 г., 13:03
Смотрите мои заметки выше, Ян: D
 ArQangel05 нояб. 2012 г., 15:40
Ян. Вы'Я хотел бы так думать. Но, когда вы пробуете такой подход, это волнует каждого. (Вот с чего я и начал) ..... :)

Ваш ответ на вопрос