ios - UISlider 边界和框架宽度返回不正确的值

标签 ios objective-c autolayout uislider

我将 UISlider 子类化,以便向其添加一些标记。

为了获得 slider 的宽度,我使用:

self.bounds.size.width

另外,self.frame.size.width 总是返回同样的东西。

问题是,如果我将我的价格差价差值作为给我的值的基础,则外部价格变动始终会出现在屏幕的边缘。查看屏幕截图。

Wide View

非常欢迎任何帮助或见解!

最佳答案

尝试使用 trackRectForBounds 代替。这将为您提供轨道的实际框架。如果您有限制和/或对 slider 进行其他设置,最好在 layoutSubviews 中获取 rect。

- (void)layoutSubviews {
    (super layoutSubviews];

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

协作更新以实现有效的解决方案:
如果您设置了约束,请在此处检查它们的大小是否仍然正确,如果不正确,您将不得不更新他们的一些常量,然后调用 [self layoutIfNeeded] 再做一次。不过要小心,每次都这样做会导致无限循环。

关于ios - UISlider 边界和框架宽度返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48876958/

相关文章:

ios - 设置 UITextField 不可编辑或可编辑

根据自动调整大小掩码,UITableViewCellContentView 宽度始终为零(仅在 iOS 7 上)

iOS UINavigationController barHideOnTapGestureRecognizer 和 UIButton 干扰

ios - 下载失败时如何让AFNetworking设置默认图片?

objective-c - 我可以使用选择器(就地)按字符串的子字符串对 NSMutablearray 进行排序吗?

c++ - c++语言/getdate()中如何定义一个表示时间值的值?

ios - 如何使用自动布局从代码中创建和添加带有多行标签的 UIButton?

ios - 如何添加约束以编程方式将两个 View 附加在一起?

ios - 区分目录和文件

ios - 自动布局导致无限 layoutSubviews 循环