Próbuję uzyskać następujący efekt przy użyciu UITextView:
Zasadniczo chcę wstawić obraz między tekstem. Obraz może po prostu zająć 1 rząd miejsca, więc nie jest konieczne zawijanie.
Próbowałem po prostu dodać UIView do podwidoku:
UIView *pictureView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
[pictureView setBackgroundColor:[UIColor redColor]];
[self.textView addSubview:pictureView];
Ale wydaje się, że unosi się nad tekstem i zakrywa go.
Poczytałem trochę o ścieżkach wykluczeń, które wydają się być jednym ze sposobów implementacji tego. Jednak nie chcę absolutnie pozycjonować obrazu - zamiast tego powinien płynąć z tekstem (podobnie jak <span>
zachowuje się w HTML).
Odpowiedzi:
Musisz użyć przypisanego ciągu i dodać obraz jako wystąpienie
NSTextAttachment
:źródło
replaceCharactersInRange
Kod @ bilobatum przekonwertowany na Swift dla potrzebujących:
źródło
Możesz spróbować użyć NSAttributedString i NSTextAttachment. Spójrz na poniższe łącze, aby uzyskać więcej informacji na temat dostosowywania NSTextAttachment w celu zmiany rozmiaru obrazu. http://ossh.com.au/design-and-technology/software-development/implementing-rich-text-with-images-on-os-x-and-ios/
W moim przykładzie zmieniam rozmiar obrazu, aby dopasować go do szerokości, w twoim przypadku możesz zmienić rozmiar obrazu, aby pasował do wysokości linii.
źródło
UIView
do a,UIImage
a następnie dodanie go jakoNSTextAttachment
. Aby wyrenderować widok na obraz, sprawdź to pytanie: http://stackoverflow.com/questions/4334233/how-to-capture-uiview-to-uiimage-without-loss-of-quality-on-retina- display? lq = 1Rozszerzając @ bilobatum za odpowiedź , i stosując tę kategorię z innym pytaniem. Ugotowałem to:
Stosowanie:
Realizacja:
.
źródło
UIFont *fontForRange = [attributesForRange valueForKey:NSFontAttributeName];
naUIFont *fontForRange = [attributesForRange valueForKey:NSFontAttributeName] ?: [UIFont fontWithName:@"HelveticaNeue" size:12.0];
powinna być lepsza, ponieważ [attributeForRange valueForKey: NSFontAttributeName] może być zerowy, jeśli nie zostanie ustawiony w słownikuRozwiązaniem problemu w prostym przykładzie jest
źródło