Swift - 如何获取按钮的 titleLabel 的中心框而不是按钮本身
Swift -How to get the center frame of a button's titleLabel and not the button itself
我有一个自定义分段控件,有 4 个段,每个段有一个按钮。我不得不更改按钮的 contentEdgeInsets:
// eg of the second button
customSegmentedControl.secondButton?.contentEdgeInsets = UIEdgeInsets(top: 0, left: -35, bottom: 0, right: 0)
滑块最初使用button.frame.midX
滑动到每个段。更改 contentEdgeInsets
后,当滑块滑动到某个段时,它看起来好像在错误的位置,因为标题不再位于按钮的中心。我试图将滑块更改为滑动到按钮的中心 button.titleLabel: button.titleLabel!.frame.midX
但是在滑块滑动不正确的地方出现了一个奇怪的错误。
for button in buttons {
UIView.animate(withDuration: 0.2, animations: {
self.slider.frame.origin.x = button.titleLabel!.frame.midX // button.frame.midX was what was originally used
// if it's the selected button break ...
})
}
如何让滑块滑动到按钮的中心titleLabel
?例如,我希望它滑动到 Pencil 这个词的中间,它是按钮的标题,其 contentEdgeInsets
已更改,而不是按钮本身的中间。
只是坐标系的问题。你不知道坐标系 button.titleLabel!.frame
是什么,所以你有这个 CGRect 但它对你没有用。
但是您确实知道 滑块的 frame
需要在哪个坐标系中;它是在其超级视图方面。
所以将button.titleLabel!.frame
转换为滑块父视图的坐标系,现在就可以有意义地移动滑块了。
let convertedRect = slider.superview!.convert(button.titleLabel!.frame, from: button.titleLabel!)
我有一个自定义分段控件,有 4 个段,每个段有一个按钮。我不得不更改按钮的 contentEdgeInsets:
// eg of the second button
customSegmentedControl.secondButton?.contentEdgeInsets = UIEdgeInsets(top: 0, left: -35, bottom: 0, right: 0)
滑块最初使用button.frame.midX
滑动到每个段。更改 contentEdgeInsets
后,当滑块滑动到某个段时,它看起来好像在错误的位置,因为标题不再位于按钮的中心。我试图将滑块更改为滑动到按钮的中心 button.titleLabel: button.titleLabel!.frame.midX
但是在滑块滑动不正确的地方出现了一个奇怪的错误。
for button in buttons {
UIView.animate(withDuration: 0.2, animations: {
self.slider.frame.origin.x = button.titleLabel!.frame.midX // button.frame.midX was what was originally used
// if it's the selected button break ...
})
}
如何让滑块滑动到按钮的中心titleLabel
?例如,我希望它滑动到 Pencil 这个词的中间,它是按钮的标题,其 contentEdgeInsets
已更改,而不是按钮本身的中间。
只是坐标系的问题。你不知道坐标系 button.titleLabel!.frame
是什么,所以你有这个 CGRect 但它对你没有用。
但是您确实知道 滑块的 frame
需要在哪个坐标系中;它是在其超级视图方面。
所以将button.titleLabel!.frame
转换为滑块父视图的坐标系,现在就可以有意义地移动滑块了。
let convertedRect = slider.superview!.convert(button.titleLabel!.frame, from: button.titleLabel!)