iOS UIButton с UITextAlignmentLeft по-прежнему центрирует текст?

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

jQuery(function ($) {

    /**
     * This small plugin will scrollTo a target, smoothly
     *
     * First argument = time to scroll to the target
     * Second argument = set the hash in the current url yes or no
     */
    $.fn.smoothScroll = function(t, setHash) {
        // Set time to t variable to if undefined 500 for 500ms transition
        t = t || 500;
        setHash = (typeof setHash == 'undefined') ? true : setHash;

        // Return this as a proper jQuery plugin should
        return this.each(function() {
            $('html, body').animate({
                scrollTop: $(this).offset().top
            }, t);

            // Lets set the hash to the current ID since if an event was prevented this doesn't get done
            if (this.id && setHash) {
                window.location.hash = this.id;
            }
        });
    };

});

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

(сценарий должен находиться в разделе onload)

if (window.location.hash) {
    window.scrollTo(0,0);
    $(window.location.hash).smoothScroll();
}

Затем мы привязываем плагин к onclick якорей, которые содержат только хэш в свой атрибут href.

(скрипт должен быть в пределах секции onload)

$('a[href^="#"]').click(function(e) {
    e.preventDefault();

    $($(this).attr('href')).smoothScroll();
});

Поскольку jQuery ничего не делает, если само совпадение не выполняется, у нас есть хороший резерв, когда цель на странице не может быть найдена yay \ o /

Обновить

Альтернативный обработчик onclick для прокрутки вверху, когда theres только хеш:

$('a[href^="#"]').click(function(e) {
    e.preventDefault();
    var href = $(this).attr('href');

    // In this case we have only a hash, so maybe we want to scroll to the top of the page?
    if(href.length === 1) { href = 'body' }

    $(href).smoothScroll();
});

Вот также простой jsfiddle, который демонстрирует прокрутку внутри страницы , onload немного сложно настроить ...

http://jsfiddle.net/sg3s/bZnWN/

Обновление 2

Таким образом, у вас могут возникнуть проблемы с тем, что окно уже прокручивается до элемента onload. Это исправляет: window.scrollTo(0,0); он просто прокручивает страницу влево. Добавили его в фрагмент кода выше.

29
задан memmons 18 February 2012 в 21:35
поделиться

6 ответов

Мой тестовый код:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(20, 20, 200, 72);
UIImage *image = [UIImage imageNamed:@"rob.png"];
[button setImage:image forState:UIControlStateNormal];
button.imageEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
[button setTitle:@"Hello" forState:UIControlStateNormal];
button.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[self.view addSubview:button];

Обратите внимание, что я установил button.contentHorizontalAlignment, а не button.titleLabel.textAlignment. Мой результат:

Screen shot of label

80
ответ дан rob mayoff 18 February 2012 в 21:35
поделиться

Поместите цвет фона на заголовок. Могу поспорить, что он подходит по размеру, поэтому выравнивание текста не имеет значения. Это только столько, сколько нужно. Что вам нужно исправить, так это положение самой этикетки. Возможно, вам придется расширить UIButton и переопределить layoutSubviews, чтобы сделать это правильно. Я никогда не видел кнопки с чем-то кроме центрированного ярлыка.

4
ответ дан ZaBlanc 18 February 2012 в 21:35
поделиться

Swift 3

Установить свойство contentHor HorizontalAlignment делать работу. Спасибо

yourButton.contentHorizontalAlignment = .left
1
ответ дан Riajur Rahman 18 February 2012 в 21:35
поделиться

Установите свойство contentHor HorizontalAlignment для кнопки:

yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
2
ответ дан Evana 18 February 2012 в 21:35
поделиться

Просто переопределите установщик кнопки и попробуйте установить свойство contentHorizontAlignment в установщике:

-(UIButton *)yourButton {
      [_yourButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];

    return _yourButton;
}
0
ответ дан Mostafa Elbutch 18 February 2012 в 21:35
поделиться

установите свойство contentHorizontAlignment для кнопки, оно будет работать.

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

Swift 4.0

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignment.center
22
ответ дан Vineesh TP 18 February 2012 в 21:35
поделиться