У меня была именно эта проблема: большой палец UISlider не перемещается на дорожке, когда MaximumValue устанавливается программно, даже если вы явно вызываете setValue. Например:
// 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
*/
Если кто-нибудь знает лучший способ сделать это, я хотел бы прочитать об этом. (-: