问题
I have UIScrollView and UILabel. I want to change UILabel size dynamically from 33.0 to 0.0 , 0.0 to 33 when user scroll up / down my UIScrollView.
How can I do this?
@IBOutlet weak var myLabel : UILabel!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let offset = scrollView.contentOffset.y
let fontpointmath = (myLabel.font.pointSize / (offset / 100) - 15)
if offset > 0 {
if fontpointmath < 0 {
myLabel.font = UIFont(name: "Arial", size: 0.0)
}else if fontpointmath > 33 {
myLabel.font = UIFont(name: "Arial", size: 33.0)
}else{
myLabel.font = UIFont(name: "Arial", size: CGFloat(fontpointmath))
}
}
My current code only allow font size to about 15 points and doesn't change to 0. It also doesn't go up to 33 when user scroll down again.
回答1:
Please try to use transform instead font size changing
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
myLabel.font = UIFont(name: "Arial", size: 33.0)
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let offset = scrollView.contentOffset.y
let scale = min(max(1.0 - offset / 200.0, 0.0), 1.0)
myLabel.transform = CGAffineTransform(scaleX: scale, y: scale)
}
来源:https://stackoverflow.com/questions/41186530/how-change-font-size-dynamically-when-scrollview-contentoffset-y-changed