当我更改其maximumValue属性时,UISlider的scrub不会重新定位。我通过擦除UISlider A来动态更改UISlider B的maximumValue属性。所以当UISlider A被更改为例如1 UISlider B的maximumValue + = 1。 UISlider B应自动更新其擦洗位置,但事实并非如此。如果我按下UISlider B,它会更新。
解决方法是什么?
答案 0 :(得分:3)
我遇到了这个问题:即使你明确调用setValue,当以编程方式设置maximumValue时,UISlider拇指也不会在轨道上重新定位。例如:
// Setup:
UISlider *a = [[UISlider alloc] init];
a.minimumValue = 1.00;
a.maximumValue = 100.00;
[a setValue: 50.00];
/* CORRECT: The thumb is in the centre of the track, at position "50.00":
1 --------------------------- () --------------------------- 100
a.value == 50
*/
// Set maximumValue programmatically:
[a setMaximumValue: 1000.00];
/* INCORRECT: The thumb is still in the centre of the track: position "500.00":
1 --------------------------- () --------------------------- 1000
a.value == 50
|<---- It should be here (!)
*/
// Call setValue explicitly, to no avail:
[a setValue: 50.00];
/* INCORRECT: The thumb is still in the centre of the track: position "500.00":
1 --------------------------- () --------------------------- 1000
a.value == 50
|<---- It should be here (!)
*/
我能够解决这个问题的唯一方法(在网上,书籍和实验中寻找解决方案的几个小时后)是更改 UISlider的值,这似乎迫使UISlider重绘。我不喜欢它,但它有效:
[a setValue:a.value+1 animated:NO];
[a setValue:a.value-1 animated:NO];
/* (The thumb is now at position "50.00"):
1 -- () ---------------------------------------------------- 1000
a.value == 50
*/
如果有人知道更好的方法,我很乐意阅读它。 ( - :
答案 1 :(得分:0)
如果要更改滑块的值,则需要使用:
- (void)setValue:(float)value animated:(BOOL)animated
maximumValue仅更改拇指可以代表的上限值