2014-10-09 6 views
5

Mam UITableView, który używa automatycznego układu. Mam wiele typów komórek, ale na razie użyjmy najprostszego ze wszystkich, takiego, który ma tylko UILabel.Usuwanie wypełnienia/marginesu UILabel podczas korzystania z automatycznego układu

W tableView:heightForRowAtIndexPath: Mam następujący kod:

[self configureCell:self.detailsCell forRowAtIndexPath:indexPath]; 
    [self.detailsCell layoutIfNeeded]; 

    CGSize size = [self.detailsCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
    return size.height + 1; 

co z kolei wywołuje

- (void)configureCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    // ... 
    cell.detailsLabel.text = self.data.myText; 
    cell.detailsLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; 
    // [cell.detailsLabel sizeToFit]; <- I tried this, but didn't help 
} 

Interface builder screenshot

i skończyć się coraz to:

Actual cell

Zielony prostokąt jest rzeczywistą komórką. Purpurowy prostokąt to UILabel. Nie chcę dopełnienia/marginesu górnego i dolnego. Jak mogę się go pozbyć?

+0

Wygląda jak masz stałe z tymi konfiguracji marginesy w serii ujęć. Więc zachowuje się dokładnie tak, jak powinien. – sha

+1

Te marginesy są zielone. Nie chce dopełnienia wewnątrz samej etykiety. – Paludis

Odpowiedz

0

Możesz dodać poziomy środek do UILabel. Następnie ustaw "Większy niż lub równy" w relacji "górna przestrzeń do super podglądu" i ustaw dolną przestrzeń w ten sam sposób. Utwórz i uruchom, a zobaczysz, że dynamiczna wysokość UILabel jest zgodna z zawartością UILabel.

-1

Marginesy są spowodowane ustawionymi ograniczeniami autolayout. Ustaw wszystkie marginesy na zero w inspektorze rozmiaru.

Jeśli używasz Xcode 6 &, obsługuje iOS 8, ograniczenia mogą być ustawione na "margines kontenera" zamiast samego "kontenera". Jest nieco inny i ustawienie marginesu na pojemnik do zera będzie działać dla ciebie. Możesz przełączać się między nimi podczas konfigurowania wiązań w serii ujęć, naciskając "Alt".

+1

Te marginesy są poza etykietą, pytanie dotyczy dopełnienia wewnątrz etykiety. – Paludis

5

trzeba się wystrzegać „ograniczyć do marginesie:

porównać te dwa obrazy: Constrain to margins = YES i Constrain to marings = NO

więc usuwanie zaznaczenia „constrian na marginesie”, podczas dodawania nowych ograniczeń, powinien Rozwiąż swój problem z wypełnieniem/marginesem :-)

Jeśli chcesz, możesz zwizualizować te marginesy za pomocą "Edytora/płótna/Pokaż układ prostokąta" Widok bez prostokątów układ: Show Layout rectangles = NO i układ prostokąty ustawione, aby pokazać (co ilustruje problem dość dobrze) Show Layout rectangles = YES

+0

Niestety, próbowałem tego. To, co widziałem, to to, że wypełnienie nie jest deterministyczne. Czasami jest wyższy niż inne ... chociaż wygląda na to, że jest więcej tekstu, dopełnienie staje się większe. – Eric

+0

Mh ... może twoje ograniczenia nie determinują układu (nie wiesz dlaczego, ale może). Aby to sprawdzić, po pauzie w debugerze wpisz 'po [[UIWindow keyWindow] _autolayoutTrace]'. Lub z drugiej strony, może spróbować ustawić etykietę 'preferredMaxLayoutWidth'.Jest to ważne, ponieważ jest to szerokość, przy której etykieta przestanie rosnąć poziomo i zacznie rosnąć pionowo. @Eric – Flori

Powiązane problemy