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

时间:2011-08-27 05:33:40

标签: iphone uiview slider subview uislider

当我将滑块添加为除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];

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

3 个答案:

答案 0 :(得分:9)

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

[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];

如果滑块消失,则子菜单的框架不好。

答案 1 :(得分:9)

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

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

过去,像UISlider,UISwitch和UIPickerView这样的UIViews的帧高已经固定为某个预定义的值。您可以设置框架高度,但会被忽略。而不是试图记住," iPad / iPhone上的风景画中UISlider的高度是多少?",我一直将高度设置为0并让操作系统指定默认值。

David Braun's回答让我意识到我的UISlider框架的高度为0会导致用户无法进行交互。

答案 2 :(得分:-1)

我有一个类似的问题,滑块没有水平线,只有白色按钮,根本没有响应。 基于以上所述,我意识到,我的滑块比我的安全区宽。在两侧设置一些约束,现在它工作得很好。