ho affrontato un problema simile in un App ho lavorato su e ha deciso quanto segue:
i. Crea UIPicker
ii. Trova il punto medio delle righe di selezione presentate.
iii. Aggiungi due UILabels allo schermo e in - (void)layoutSubview;
assicurati che le etichette siano sempre posizionate accanto ai punti medi.
Ho solo bisogno di supporto in modalità verticale nel mio progetto, ma dovrebbe funzionare anche per il paesaggio. Basta scegliere una larghezza sufficiente, la larghezza della riga, in modo da non sovrapporre i dati all'interno del selettore. Ecco un frammento di codice per UIPicker:
#pragma mark - Picker View
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if(component == 0) {
return self.hourPickerData.count;
} else {
return self.minutePickerData.count;
}
}
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
return 40;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
return 30;
}
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
NSString *text;
if(component == 0) {
text = self.hourPickerData[row];
} else {
text = self.minutePickerData[row];
}
UILabel *label = (UILabel*)view;
if(view == nil) {
label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 40, 30)];
label.backgroundColor = [UIColor clearColor];
label.text = text;
label.textAlignment = NSTextAlignmentCenter;
label.textColor = LYTiT_HEADER_COLOR;
label.font = [UIFont fontWithName:LT_HELVETICA size:16];
}
return label;
}
Qual è il motivo particolare per il layout automatico? Non è realmente possibile con mezzi semplici perché le parti interne della vista di selezione non sono esposte, quindi la creazione di vincoli contro la gerarchia interna è soggetta a errore e non è raccomandata. In questo caso, vorrei creare una sottoclasse di un 'UIPickerView' (come' UIDatePicker' di Apple) e implementare tutta la logica lì usando le posizioni dei frame calcolate. –
Capisco il tuo punto di vista così invece di Autolayout la domanda diventa "come implementare una sottoclasse' UIPickerView' che funziona con tutte le dimensioni dello schermo e anche in orientamento orizzontale e verticale dello schermo – Luca
Per la cronaca, UIDatePicker di Apple NON sottoclasse UIPickerView. – quickthyme