Я также делаю все программно, и я бы посоветовал вам использовать библиотеку UIKitPlus , которая решит многие ваши проблемы
например, вы можете установить разный размер шрифта для разных устройств или типы устройств легко
TextView().font(.helveticaNeueRegular, 16 !! .iPad(24))
Как вы могли видеть в приведенном выше примере, вы можете установить какое-то значение как обычно, а также вы можете указать другое значение для другого типа устройства через оператор !!
.
Это действительно просто и удобно в использовании.
Весь контроллер вашего вида может выглядеть как
import UIKitPlus
class MyViewController: ViewController {
@State var weight = ""
@State var repetitions = ""
@State var notes = ""
override func buildUI() {
super.buildUI()
body {
VStack {
Text("Bench Press")
.color(.black)
.font(.articoBold, 32)
.edgesToSuperview(top: 16, leading: 16)
VSpace(32)
TextField($weight)
.placeholder(AttrStr("Total weight").foreground(.lightGray).font(.articoRegular, 14))
.leftView(HStack {
HSpace(4)
Text("Weight (lbs)").color(.black).font(.articoMedium, 14)
HSpace(4)
})
.color(.black)
.font(.articoRegular, 14)
.keyboard(.numbersAndPunctuation)
.returnKeyType(.next)
.tag(0)
.shouldReturnToNextResponder()
TextField($repetitions)
.placeholder(AttrStr("Number or Reps...").foreground(.lightGray).font(.articoRegular, 14))
.leftView(HStack {
HSpace(4)
Text("Repetitions").color(.black).font(.articoMedium, 14)
HSpace(4)
})
.color(.black)
.font(.articoRegular, 14)
.keyboard(.numbersAndPunctuation)
.returnKeyType(.next)
.tag(1)
.shouldReturn { $0.resignFirstResponder() }
VSpace(32)
HStack {
Image(nil).size(40)
HSpace(8)
Text("Timer").color(.lightGray).font(.articoMedium, 14)
}
.alignment(.center)
VSpace(32)
TextView($notes)
.placeholder("Notes...")
.color(.black)
.font(.articoRegular, 14)
VSpace(32)
Text("Set 1 0 lbs - 0 Reps").color(.black).font(.articoRegular, 14)
VSpace(16)
Text("Set 2 0 lbs - 0 Reps").color(.black).font(.articoRegular, 14)
VSpace(16)
Text("Set 3 0 lbs - 0 Reps").color(.black).font(.articoRegular, 14)
VSpace(16)
Text("Set 4 0 lbs - 0 Reps").color(.black).font(.articoRegular, 14)
Space()
HStack {
Button("Next Set").onTapGesture {
print("next set tapped")
}
Button("Next Excercise").onTapGesture {
print("next excercise tapped")
}
}
VSpace(32)
}
.alignment(.center)
.edgesToSuperview()
}
}
}