Ios UISlider边界和帧宽度返回不正确的值

Ios UISlider边界和帧宽度返回不正确的值,ios,objective-c,autolayout,uislider,Ios,Objective C,Autolayout,Uislider,我对UISlider进行了子类化,以便为其添加一些标记 要获得滑块的宽度,我使用: self.bounds.size.width 此外,self.frame.size.width始终返回相同的内容 麻烦的是,如果我将刻度分布的值设为基准,那么外部刻度始终位于屏幕边缘。查看屏幕截图 欢迎提供任何帮助或见解 尝试改用trackRectForBounds。这将为您提供轨迹的实际帧。如果您有约束和/或对滑块进行其他设置,最好在layoutSubviews中获取rect - (void)layoutSu

我对UISlider进行了子类化,以便为其添加一些标记

要获得滑块的宽度,我使用:

self.bounds.size.width

此外,self.frame.size.width始终返回相同的内容

麻烦的是,如果我将刻度分布的值设为基准,那么外部刻度始终位于屏幕边缘。查看屏幕截图


欢迎提供任何帮助或见解

尝试改用
trackRectForBounds
。这将为您提供轨迹的实际帧。如果您有约束和/或对滑块进行其他设置,最好在
layoutSubviews
中获取rect

- (void)layoutSubviews {
    (super layoutSubviews];

    CGRect r = [self trackRectForBounds:self.bounds];
    CGFloat startPosition = r.origin.x;
    CGFloat width = r.size.width;
}

协作更新以实现有效的解决方案:
如果设置了约束,请检查它们是否仍然是正确的大小,如果不是,则必须更新它们的一些常量,然后调用[self-LayoutFneed]再次执行此操作。但是要小心,每次执行此操作都会导致无限循环。

请添加代码。如果使用视图而不是尝试self.view.frame.size.widthUISlider,则它不是视图,而是控件,因此self.view未定义。代码在这里:不起作用,我的代码是这样的,使用该值仍然会使其不准确:[self-trackRectForBounds:self.bounds].size.Width您还需要从[self-trackRectForBounds:self.bounds].origin.X开始。另一个可能存在问题的问题是,您需要等待大小和位置最终确定。如果使用约束,这一点尤其重要。执行这些操作的最佳位置是
layoutSubviews
。我已经更新了我的答案。很好。我试试这个。感谢您的建议这是正确的,但我必须补充一点,我必须检查我的约束是否与之前设置的宽度相匹配。如果没有,那么我必须在layoutSubviews方法中再次更新约束的常量值,然后调用[self-layoutifneed]