当 UISlider 成为 UIView 其他 self.view 的子视图时,它将无法工作

发布于 2024-12-01 22:50:37 字数 597 浏览 2 评论 0原文

当我将滑块添加为除 self.view 之外的任何视图的子视图时,它不起作用(不滑动),但当它是 self.view 的子视图时,它工作正常。除了 self.view 之外,您可以在其他视图上看到它,但它不起作用。

这是我的代码:

alphaSlider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, 90, 10)];
    [alphaSlider setMinimumValue:0.01];
    [alphaSlider setMaximumValue:1];
    [alphaSlider setValue:0.5];
    [alphaSlider setUserInteractionEnabled:YES];
    [alphaSlider addTarget:self action:@selector(alphaSliderDidChange:) forControlEvents:UIControlEventValueChanged];
    alphaSlider.continuous = YES;
[submenu addSubview:alphaSlider];

有什么方法可以解决这个问题吗?

When I add my slider as subview of any view besides self.view it does not work (doesn't slide) but it works fine when it is a subview of self.view. You can see it on the other views besides self.view but it doesn't work.

Here is my code:

alphaSlider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, 90, 10)];
    [alphaSlider setMinimumValue:0.01];
    [alphaSlider setMaximumValue:1];
    [alphaSlider setValue:0.5];
    [alphaSlider setUserInteractionEnabled:YES];
    [alphaSlider addTarget:self action:@selector(alphaSliderDidChange:) forControlEvents:UIControlEventValueChanged];
    alphaSlider.continuous = YES;
[submenu addSubview:alphaSlider];

Any way to fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟雨凡馨 2024-12-08 22:50:37

可能是子菜单未启用用户交互。

[submenu setUserInteractionEnabled:YES];

另一种可能性是滑块的框架位于 submenu.frame 之外。

由于 UIViews 的 ClipsToBounds 属性默认为 NO,因此即使滑块位于子菜单框架之外,也不会被剪切。这意味着子菜单的框架不会覆盖滑块,并且无法将触摸事件从子菜单传递到子菜单的滑块。设置子菜单的背景颜色并确认滑块完全位于子菜单的框架中。

[submenu setBackgroundColor:[UIColor blueColor]];

子菜单的框架可能类似于 (0, 0, 0, 0)。

包含

NSLog(@"%f, %f, %f, %f", submenu.frame.origin.x, submenu.frame.origin.y, submenu.frame.size.width, submenu.frame.size.height);

您也可以这样做

[submenu setClipsToBounds:YES];

,如果滑块消失,则子菜单的框架损坏。

It may be that submenu is not enabled for user interaction.

[submenu setUserInteractionEnabled:YES];

Another possibility is that the slider's frame is outside of submenu.frame

Since the clipsToBounds property of UIViews is by default NO, the slider would not be clipped despite being outside of submenu's frame. This means that submenu's frame doesn't cover the slider, and there's no way to pass touch events from submenu to submenu's slider. Set the background color of submenu and confirm that the slider is positioned entirely in submenu's frame.

[submenu setBackgroundColor:[UIColor blueColor]];

Submenu's frame might be something like (0, 0, 0, 0).

Include

NSLog(@"%f, %f, %f, %f", submenu.frame.origin.x, submenu.frame.origin.y, submenu.frame.size.width, submenu.frame.size.height);

You could also do

[submenu setClipsToBounds:YES];

and if the slider disappears, then submenu's frame is bad.

一笑百媚生 2024-12-08 22:50:37

检查滑块的框架高度是否太小而无法进行交互。 10 pt 可能太小了。

从 iOS 8 开始,我的滑块也停止工作。

过去,UIViews(如 UISlider、UISwitch 和 UIPickerView)的框架高度已固定为某个预定义值。您可以设置框架高度,但它会被忽略。我没有试图记住“iPad/iPhone 上横向 UISlider 的高度是多少?”,而是将高度设置为 0 并让操作系统分配默认值。

David Braun 的回答让我意识到我的 UISlider 框架的高度为 0,这禁用了用户交互。

Check that the frame height of the slider is not too small to allow interaction. 10 pt is probably too small.

Starting in iOS 8, my sliders also stopped working.

In the past, the frame height of UIViews like UISlider, UISwitch, and UIPickerView has been fixed to some pre-defined value. You could set the frame height, but it would be ignored. Instead of trying to remember, "What is the height of a UISlider in Landscape on the iPad/iPhone?", I had been setting the height to 0 and let the OS assign the default value.

David Braun's answer led me to realize that my UISlider frames had height 0 which disabled user interaction.

心作怪 2024-12-08 22:50:37

我遇到了类似的问题,滑块没有水平线,只有白色按钮,并且根本没有响应。
根据上述内容,我意识到我的滑块比我的安全区域更宽。在两侧设置一些约束,现在就可以正常工作了。

I had a similar problem, where the slider did not have the horizontal line, just the white button and did not respond at all.
Based on the above I realized, that my sliders were wider than my safe area. Set some constraints on the 2 sides, and now it works just fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文