2017-02-11 11 views
1

У меня есть квадратные кнопки, размер которых зависит от того, отображается ли это на iPad или iPhone. Я хочу, чтобы шрифт названия кнопок настраивался на размер кнопок, т.е. так что они не выглядят слишком маленькими на большом экране iPad или слишком велики на меньшем экране iPhone.Найти UIButton скорректированное значение размера шрифта?

я придумал следующее решение:

// Buttons is an outlet collection 
for button in Buttons { 
      button.titleLabel?.adjustsFontSizeToFitWidth = true 
      button.titleEdgeInsets = UIEdgeInsetsMake(button.frame.height/3, button.frame.width/3, button.frame.height/3, button.frame.width/3) 
      button.titleLabel!.numberOfLines = 1 
      button.titleLabel!.minimumScaleFactor = 0.1 
      button.clipsToBounds = true 
      button.titleLabel?.baselineAdjustment = UIBaselineAdjustment.alignCenters 

      print(button.titleLabel!.font.pointSize) 


     } 

Это обеспечивает корректировку размера шрифта на основе ширины заголовка. Таким образом, кнопки с более коротким заголовком будут иметь более крупный шрифт, чем кнопки с более длинным заголовком.

Мне нужен одинаковый размер шрифта для всех кнопок, поэтому я хотел бы получить доступ к скорректированному размеру одного из них (пусть и самого маленького), чтобы установить его на все кнопки. Как я мог это сделать?

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

+0

, пожалуйста, ответьте на ответ и ответьте –

+0

. Обновленный ответ, теперь работающий на любую стоимость. –

+0

У меня была эта проблема на ранней стадии разработки моего iOS-разработки, но теперь я понял, что это не очень хороший способ проектирования приложение. Причина, по которой это нелегко сделать, заключается в том, что на самом деле ваш контент не должен «расти» на большом экране, но вместо этого вы меняете приложение, чтобы показывать больше контента. Просто мысль, но я нашел, что это гораздо лучший способ разработки приложений. –

ответ

0

Это решение для установки размера шрифта всех кнопок на минимальный размер (среди них).

Шаг 1. Я инициализируются некоторые новые кнопки для тестирования:

let button = UIButton() 
button.titleLabel!.font = UIFont(name: "Helvetica", size: 20) 
let button2 = UIButton() 
button2.titleLabel!.font = UIFont(name: "Helvetica", size: 16) 
let button3 = UIButton() 
button3.titleLabel!.font = UIFont(name: "Helvetica", size: 19) 
let Buttons = [button, button2, button3] 

Шаг 2. Затем я добавил переменную под названием min и я инициализирован его со значением больше, чем почти любой возможный размер шрифта кнопки, 100, например, так:

var min = CGFloat(Int.max) 

Шаг 3. После этого, я добавил s Ома больше коды для вашего цикла:

for btn in Buttons{ 
    // here goes your code for your buttons(the code from the question) 
    // then my code: 
    if (btn.titleLabel?.font.pointSize)! < min{ 
     min = (btn.titleLabel?.font.pointSize)! // to get the minimum font size of any of the buttons 
    } 
} 

print(min) // prints 16, which is correct amongst the value [20,19,16] 

так что ваш код будет выглядеть следующим образом:

for btn in Buttons{ 
    btn.titleLabel?.adjustsFontSizeToFitWidth = true 
    btn.titleEdgeInsets = UIEdgeInsetsMake(btn.frame.height/3, btn.frame.width/3, btn.frame.height/3, btn.frame.width/3) 
    btn.titleLabel!.numberOfLines = 1 
    btn.titleLabel!.minimumScaleFactor = 0.1 
    btn.clipsToBounds = true 
    btn.titleLabel?.baselineAdjustment = UIBaselineAdjustment.alignCenters 
    print(btn.titleLabel!.font.pointSize) 
    if (btn.titleLabel?.font.pointSize)! < min{ 
      min = (btn.titleLabel?.font.pointSize)! // to get the minimum font size of any of the buttons 
    }  
} 

Шаг 4. Установка размера шрифта всех кнопок min:

Buttons.map { $0.titleLabel?.font = UIFont(name:($0.titleLabel?.font.fontName)! , size: min) } 

или

for btn in Buttons{ 
    btn.titleLabel?.font = UIFont(name: (btn.titleLabel?.font.fontName)!, size: min) 
} 

Если ваш минимальный размер шрифта, скажем ... , то размер шрифта всех кнопок будет .


И все. Надеюсь, поможет!

+0

К сожалению, я не знаю размер шрифта кнопок. Скажем, я поместил размер шрифта 100 на все кнопки, затем он уменьшился на дисплее с помощью 'adjustsFontSizeToFitWidth'. 'button.titleLabel! .font.pointSize' все равно вернет 100, даже если шрифт будет уменьшен. – Fredovsky

+0

затем установите его для var min = CGFloat (Int.max) –

+0

см. Обновленный ответ, он работает для любого размера –