gpt4 book ai didi

ios - Swift 汇总 respondsToSelector() 和 sizeWithFont()

转载 作者:行者123 更新时间:2023-11-28 11:19:22 28 4
gpt4 key购买 nike

我正在将以下 Objective-C 代码翻译成 Swift:

- (void)layoutSubviews
{
CGSize valueLabelSize = CGSizeZero;

if ([self.valueLabel.text respondsToSelector:@selector(sizeWithAttributes:)])
{
valueLabelSize = [self.valueLabel.text sizeWithAttributes:@{NSFontAttributeName:self.valueLabel.font}];
}
else
{
valueLabelSize = [self.valueLabel.text sizeWithFont:self.valueLabel.font];
}

CGFloat xOffset = ceil((self.bounds.size.width - valueLabelSize.width) * 0.5);
self.valueLabel.frame = CGRectMake(xOffset, ceil(self.bounds.size.height * 0.5) - ceil(valueLabelSize.height * 0.5), valueLabelSize.width, valueLabelSize.height);
}

这段代码基本上是在 UIView 中间动态加载一个 UILabel,以考虑相对字体大小和 View 的填充。这是我目前拥有的代码:

override func layoutSubviews()
{
var valueSize = CGSizeZero

if valueLabel.text != nil {
if ((self.valueLabel.text! as NSString).respondsToSelector(Selector("sizeWithAttributes:"))){
valueSize = (self.valueLabel.text! as NSString).sizeWithAttributes([NSFontAttributeName:self.valueLabel.font])
}
}

let xOffSet = ceil((self.bounds.size.width - valueSize.width) * 0.5)
valueLabel.frame = CGRectMake(xOffSet, ceil(self.bounds.size.height * 0.5) - ceil(valueSize.height * 0.5), valueSize.width, valueSize.height)
}

这不能正常工作,因为标 checkout 现在 View 的左上角。 我相信在 swift 中有一些总结 不使用 respondsToSelector() 方法但不知道如何做。我还想避免使用 sizeWithFont(),因为它已弃用

我们非常欢迎任何帮助!

最佳答案

我终于使用 superview 属性让它工作了:

override func layoutSubviews() {
super.layoutSubviews()

var valueSize = CGSizeZero
if let textValue = valueLabel.text {
valueSize = textValue.sizeWithAttributes([NSFontAttributeName:self.valueLabel.font])
}
var unitSize = CGSizeZero
if let textUnit = unitLabel.text {
unitSize = textUnit.sizeWithAttributes([NSFontAttributeName:self.unitLabel.font])
}
let xOffset = ceil((superview!.bounds.size.width - (valueSize.width + unitSize.width)) * 0.5)
valueLabel.frame = CGRectMake(xOffset, ceil(superview!.bounds.size.height * 0.5) - ceil(valueSize.height * 0.5), valueSize.width, valueSize.height)
unitLabel.frame = CGRectMake(CGRectGetMaxX(valueLabel.frame), ceil(superview!.bounds.size.height * 0.5) - ceil(unitSize.height * 0.5) + iMinistryValueInformationViewPadding, unitSize.width, unitSize.height)
}

还是谢谢你的帮助!

关于ios - Swift 汇总 respondsToSelector() 和 sizeWithFont(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29621632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com