UISlider 根据设备改变宽度

Posted

技术标签:

【中文标题】UISlider 根据设备改变宽度【英文标题】:UISlider changing width depending on device 【发布时间】:2012-10-14 16:48:11 【问题描述】:

我是 ios 编程的初学者,我正在寻找我的问题的答案。

我在 UITableViewCell 中有一个 UISlider,我正在尝试获得这种配置:Label-Slider-DetailLabel(dynamic)。

这是我的代码:

cell = [tableView dequeueReusableCellWithIdentifier:@"SelectedMeetingCell"];
[cell.textLabel setText:@"Duration"];
[cell.detailTextLabel setText:[Utilities StringFromDuration:Agenda.InitialDuration.doubleValue]];

sliderCell = (SliderCell*)[[UIViewController alloc] initWithNibName:@"SliderCell" bundle:nil].view;
[sliderCell setDelegate:self];
[sliderCell.slider setValue:Agenda.InitialDuration.doubleValue];

[cell.contentView addSubview:sliderCell];

sliderCell.slider.frame = CGRectMake(100, 0, 500, 44);

最后一行是我用来按我想要的方式放置滑块的方式。它适用于 iPad,但不适用于 iPhone 版本。有什么方法可以根据设备自动调整滑块的宽度吗?

(SliderCell 是带有 UISlider @property 的 UITableViewCell)

提前谢谢大家!

【问题讨论】:

将随机视图控制器的视图附加到高度动态的 UITableViewCell 不是一个好主意。 有什么办法可以有这种性格? 有人有想法吗? 为什么不直接将自定义滑块添加到单元格内容视图,而不是添加具有滑块的 UITableViewCell。 我刚刚收回我的本科项目的代码,我只需要更改某些元素的设计和配置。在这里,如果我理解,我是在叠加两个视图? 【参考方案1】:

您可以获取容器视图宽度并将滑块宽度设置为它的百分比,而不是对值进行硬编码。

CGRect superViewFrame = slider.superView.frame;
CGRect sliderFrame = slider.frame;
sliderFrame.size.width = <your choice  for eg, superViewFrame.size.width * 0.3f>
sliderFrame.origin.x = <your choice for eg, superViewFrame.size.width * .2f>
slider.frame = sliderFrame;

【讨论】:

但是如何只获得滑块宽度? 好吧,现在的问题是从 iPad 到 iPhone 的 x 位置问题……我想我也要做一个百分比! 再次将 x 位置设置为您的超级视图宽度的百分比将解决我猜的问题。【参考方案2】:

您可以通过调用self.view获取设备的大小

sliderCell.slider.frame = CGRectMake(100, 0, self.view.frame.size.width, self.view.frame.size. height);

根据视图的大小,您可能想要减去或除以

【讨论】:

以上是关于UISlider 根据设备改变宽度的主要内容,如果未能解决你的问题,请参考以下文章

当 UISlider 值改变时会调用啥?

UISLider 以正确的方式改变 UILabel 的值

UISlider布局忽略宽度

UISlider 突出显示状态,拇指宽度与正常不同

点击冲突中的 UIButton 和 UISlider

UISlider 手柄在不同尺寸的 iPad 上更改宽度