• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

调用 setText 时,iOS UILabel 位置被重置

[复制链接]
菜鸟教程小白 发表于 2022-12-12 18:49:02 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我现在正在使用 Objective-C 在 iOS 中实现一个功能,即当 slider 值发生变化时,在 slider 的“节点”上方制作一个文本标签。文本标签文本是 slider 的当前值。

所以,我在 Storyboard View Controller 上添加了 UILabel。

@property (strong, nonatomic) IBOutlet UILabel *tempoSliderLabel;

在slider onchange函数中,计算sliderNodePosition后,

[self.tempoSliderLabel setText:[NSString stringWithFormat"%ld", sliderTempoValue]];
[self.tempoSliderLabel setCenter: CGPointMake(slideNodePosition.x, slideNodePosition.y - 10.0)];

但是,我不知道为什么标签有时会回到 Storyboard中的原始位置。在测试过程中看起来像“闪烁”:

Screenshot GIF

然后,我再次尝试删除 setText,标签按预期“移动”。

那么,如何防止 setText 重置标签位置?



Best Answer-推荐答案


IBOutlet 的 lblValue 和它的 x 约束,如

IBOutlet UILabel * lblValue;
IBOutlet NSLayoutConstraint *sliderValueXconstraints;

enter image description here

slider 的IBAction

-(IBAction)sliderActionUISlider*)slider
{
    float x = [self xPositionFromSliderValue:slider];
    sliderValueXconstraints.constant=x;
    lblValue.text = [NSString stringWithFormat"%f", slider.value];
}

- (float)xPositionFromSliderValueUISlider *)aSlider
{
    float sliderRange = aSlider.frame.size.width - aSlider.currentThumbImage.size.width;
    float sliderOrigin = aSlider.frame.origin.x + (aSlider.currentThumbImage.size.width / 2.0);

    float sliderValueToPixels = (((aSlider.value - aSlider.minimumValue)/(aSlider.maximumValue - aSlider.minimumValue)) * sliderRange) + sliderOrigin;

    return sliderValueToPixels;
 }

输出

enter image description here

关于调用 setText 时,iOS UILabel 位置被重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35913544/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap