UITableView la sección de índice de espaciamiento en iOS 7

En iOS 6, mi UITableView la sección de índice de la distribución de todos sus elementos de manera uniforme en toda la altura de la vista de tabla. En iOS 7 todos los elementos están agrupadas en el medio, haciendo de los elementos difícil toca. Hay alguna forma de espacio ellos?

InformationsquelleAutor Senior | 2013-09-20

7 Kommentare

  1. 7

    Una de las posibles soluciones aquí – es agregar cadena vacía justo después de cada adición de real el título de su sección título del índice de la matriz y regresar índice dividido por 2 en su tableView: sectionForSectionIndexTitle: atIndex: método.

    Este truco aumentar ligeramente la distancia entre los sucesivos títulos, pero no resolver completamente este problema.

    • se pls u subir ur código y la captura de pantalla para que
    • Este es un tonto hack, pero es una solución fácil y funciona bien si se puede predecir la cantidad de títulos de la sección que desea mostrar. No sé por qué Apple elegir cambiar este control en este camino!
    • Acabo de crear una respuesta con la aplicación de @Anton Malmygin solución.
  2. 7

    Aquí es una aplicación de Anton Malmygin respuesta, usted puede añadir más espacio con sólo añadir más vacía itens en la matriz:

    Primero, vamos a crear un array con los falsos índice.

        NSArray *array = self.mydataArray; //here are your true index
        self.sectionsTitle = [NSMutableArray array];
        int n = array.count;
    
        //In IOS 7 all index of the items are clumped together in the middle,
        //making the items difficult to tap.
        //As workaround we added "fake" sections index
        //reference: https://stackoverflow.com/questions/18923729/uitableview-section-index-spacing-on-ios-7
    
        for (int i = 0; i < n; i++){
            [self.sectionsTitle  addObject:array[i]];
            [self.sectionsTitle  addObject:@""];
        }

    A continuación, puede aplicar formato tableview delegado métodos con el siguiente enfoque:

    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
    {
        //In IOS 7 all index of the items are clumped together in the middle,
        //making the items difficult to tap.
        //As workaround we added "fake" sections index
        //reference: https://stackoverflow.com/questions/18923729/uitableview-section-index-spacing-on-ios-7
        if ([sectionsTitle[section] isEqualToString:@""]){
            return 0;
        }
        return x; //return your desire section height 
    }
    
    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        //In IOS 7 all index of the items are clumped together in the middle,
        //making the items difficult to tap.
        //As workaround we added "fake" sections index
        //reference: https://stackoverflow.com/questions/18923729/uitableview-section-index-spacing-on-ios-7
        if ([sectionsTitle[section] isEqualToString:@""]){
            return nil;
        }else{
           //return your desire header view here, 
           //if you are using the default section header view, 
           //you don't need to implement this method
           return //return your custom view
        }
    }
    
    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
        return self.sectionsTitle;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
        //In IOS 7 all index of the items are clumped together in the middle,
        //making the items difficult to tap.
        //As workaround we added "fake" sections index
        //reference: https://stackoverflow.com/questions/18923729/uitableview-section-index-spacing-on-ios-7
        if ([title isEqualToString:@""]){
             return -1;
        }
        return [sectionsTitle indexOfObject:title];
    }
    
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        //In IOS 7 all index of the items are clumped together in the middle,
        //making the items difficult to tap.
        //As workaround we added "fake" sections index
        //reference: https://stackoverflow.com/questions/18923729/uitableview-section-index-spacing-on-ios-7
        if ([sectionsTitle[section] isEqualToString:@""]){
            return 0;
        }
        return //your logic here;
    }

    Y aquí está el resultado:

    UITableView la sección de índice de espaciamiento en iOS 7

  3. 4

    Hay un poco más fácil camino para completar Anton sugerencia también puede ser ampliado a cualquier número de índices por sección (en lugar de sólo tener dos como Anton sugerido). Para agregar el número adicional de índice de títulos que desea. En este ejemplo he utilizado 4.

    Así que lo primero es agregar las cosas a un indexTitles matriz, en viewDidLoad o lo que sea.
    NOTA: Esto también se puede hacer de forma dinámica si va a agregar contenido al formato tableview
    de forma asíncrona, por eso he añadido la declaración de si, por lo tanto, como no es la primera
    uno va a sustituir el vacío cadenas con los períodos. Esto es por lo que no habrá perdida
    la menstruación al final

    @property (nonatomic, strong) NSArray *indexTitles;
    
    
    - (void) addIndexTitle:(NSString *) indexTitle {
            if ([self.indexTitles count]) {
                NSInteger last = self.indexTitles.count;
                self.indexTitles[last - 1] = @".";
                self.indexTitles[last - 2] = @"."; //Change the number of these depending
                self.indexTitles[last - 3] = @"."; //on the number of lines in the index titles
            }
            [self.indexTitles addObject:indexTitle];
            [self.indexTitles addObject:@""];  //Add different strings here for multiline 
            [self.indexTitles addObject:@""];  //index titles
            [self.indexTitles addObject:@""];
    }

    Que ahora podemos utilizar el operador de módulo dependiendo de cuántas cadenas tenemos por índice Título.

    - (NSInteger) tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
        index = index - index % 4;  //This is the index of the section you want
        NSInteger newIndex = index;
        //do any other processing here (if need be) to determine the correct index here
        return newIndex;

    }

    No olvide declarar la sección de índice de títulos para el formato tableview.

    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
        return self.indexTitles;
    }

    Aquí es uno que hice que carga el contenido de forma dinámica:

    UITableView la sección de índice de espaciamiento en iOS 7

  4. 3

    he encontrado una solución:

    - (void)setIndexUIForTableView:(UITableView*)tableView{
        //UI the index view
        for(UIView *view in [tableView subviews]) {
            if([view respondsToSelector:@selector(setIndexColor:)]) {
                [view performSelector:@selector(setIndexColor:) withObject:[UIColor clientblack]];
    
                if ([view respondsToSelector:@selector(setFont:)]) {
                    [view performSelector:@selector(setFont:) withObject:[UIFont systemFontOfSize:15.0]];
                    [view performSelector:@selector(setBackgroundColor:) withObject:[UIColor clientsidebarGray]];
    
                }
            }
        }
    }

    agregar más abajo, en su método y después se cargan los datos

     [self setIndexUIForTableView:tableview];
    
        [tableview reloadData];
    • Han utilizado este para el posicionamiento de las etiquetas?
    • He usado esto para aumentar el tamaño de la fuente y el posicionamiento de las etiquetas correctamente al hacer una recarga de dos veces…..una vez en cellforrowatindexpath y una vez cuando llegan los datos
    • Esto no funciona en iOS 9
  5. 2

    Aquí es algo que he jugado con el y funciona. Sigue Anton M del consejo, utiliza Swift 2 y ios 9.

    Digamos que usted tiene la siguiente sección de índices:

    let indexes: [String] = ["A", "B", "C", "D", "E"]

    Para que todo el mundo está en la misma página, Una es en el índice 0. B es en el índice 1, y así sucesivamente.

    Vamos a suponer que usted desea dos espacios entre los índices. Luego de definir su sección de índices como:

    let indexes: [String] = ["A", "", "", "B", "", "", "C", "", "", "D", "", "", "E"]

    Así que ahora, sigue en el índice 0, pero B es ahora en el índice 3, C es a las 6, D es a las 9 y E es de 12.

    Todo lo que necesitas es averiguar el desplazamiento en el sectionForSectionIndexTitle. Lo que está después es el índice real de un título como este es lo que tienes en tu tabla. Por lo tanto:

    override func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int {        
            return index / 3
    }

    Así, para cada espacio extra que necesitas entre los índices que usted necesita para añadir un 1 al enumerador de la expresión anterior. Usted puede probar fácilmente esta en el Patio de recreo.

  6. 1

    He probado la solución por Jatin, pero el resultado fue que sólo el cambio en el color y la fuente de la sección de índice. Se mantiene verticalmente comprimido y centrado.

    Creo que este es el nuevo comportamiento de iOS7 (aunque creo que este no es el mejor aspecto visual). Este comportamiento es visible también en este documento oficial de Apple: iOS Human Interface Guidelines – Vista de Tabla

  7. -2

    He probado este mod y funciona, pero usted también tiene que establecer la llamada a la rutina en la viewDidAppear método para que cada vez que la vista aparece que usted necesita llamar a esta rutina y, a continuación, volver a cargar la tabla.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea