iOS 7 UITextView wyrównanie pionowe
Jak to możliwe, że mój edytowalny UITextView
(umieszczony wewnątrz prostego kontrolera UIViewController wewnątrz UISplitView
, który działa jako delegat dla UITextView
) nie pokazuje tekstu od początku, ale po czymś w rodzaju 6-7 linii?
Nie ustawiłem żadnego konkretnego autolayout lub coś podobnego, próba usunięcia tekstu nie pomaga(więc żadnych ukrytych znaków lub coś).
[7]}używam iOS 7 na iPadzie, w storyboard wygląda dobrze... Problem jest taki sam na iOS simulator i prawdziwe urządzenia. Zaczynam się wściekać: p Tu jest jakiś kod. To jest ViewControllerviewDidLoad()
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.itemTextField.delegate = self;
self.itemTextField.text = NSLocalizedString(@"NEWITEMPLACEHOLDER", nil);
self.itemTextField.textColor = [UIColor lightGrayColor]; //optional
}
A oto nadpisane funkcje dla UITextView
używam kodu, który znalazłem w StackOverflow, aby symulować symbol zastępczy dla widoku(to samo w wersji na iPhone ' a działa dobrze)...
// UITextView placeholder
- (void)textViewDidBeginEditing:(UITextView *)textView
{
if ([textView.text isEqualToString:NSLocalizedString(@"NEWITEMPLACEHOLDER", nil)]) {
textView.text = @"";
textView.textColor = [UIColor blackColor]; //optional
}
[textView becomeFirstResponder];
}
- (void)textViewDidEndEditing:(UITextView *)textView
{
if ([textView.text isEqualToString:@""]) {
textView.text = NSLocalizedString(@"NEWITEMPLACEHOLDER", nil);
textView.textColor = [UIColor lightGrayColor]; //optional
}
[textView resignFirstResponder];
}
-(void)textViewDidChange:(UITextView *)textView
{
int len = textView.text.length;
charCount.text = [NSString stringWithFormat:@"%@: %i", NSLocalizedString(@"CHARCOUNT", nil),len];
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
return YES;
}
8 answers
Spróbuj wywołać -sizeToFit
po przekazaniu tekstu. Ta odpowiedź może być przydatna do wyrównania tekstu w pionie w UILabel .
[Aktualizacja]
Aktualizuję tę odpowiedź o uczynić ją bardziej czytelną.
Problem polega na tym, że z iOS7 Kontrolery widoku kontenera, takie jak UINavigationController lub UITabbarController, mogą zmieniać wkłady zawartości widoków przewijania (lub widoków, które z niego dziedziczą), aby uniknąć nakładania się zawartości. Dzieje się tak tylko wtedy, gdy widok przewijania jest głównym widokiem lub pierwszymi podglądami podrzędnymi. Na unikaj, aby wyłączyć to zachowanie, ustawiając automaticallyAdjustsScrollViewInsets
Na NO, lub nadpisując tę metodę na return NO.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:24
Przechodziłem przez ten sam problem.
Rozwiązałem to, wyłączając automatyczne dopasowanie wstawek przewijania:
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")){
self.automaticallyAdjustsScrollViewInsets = NO; // Avoid the top UITextView space, iOS7 (~bug?)
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-10 21:35:26
Jest to dość powszechny problem, więc stworzyłbym prostą podklasę UITextView, abyś mógł ją ponownie użyć i użyć w IB.
Użyłbym zamiast tego contentInset, upewniając się, że z gracją obsłuży sprawę, w której contentSize jest większy niż granice textView
@interface BSVerticallyCenteredTextView : UITextView
@end
@implementation BSVerticallyCenteredTextView
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame])
{
[self addObserver:self forKeyPath:@"contentSize" options: (NSKeyValueObservingOptionNew) context:NULL];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super initWithCoder:aDecoder])
{
[self addObserver:self forKeyPath:@"contentSize" options: (NSKeyValueObservingOptionNew) context:NULL];
}
return self;
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"contentSize"])
{
UITextView *tv = object;
CGFloat deadSpace = ([tv bounds].size.height - [tv contentSize].height);
CGFloat inset = MAX(0, deadSpace/2.0);
tv.contentInset = UIEdgeInsetsMake(inset, tv.contentInset.left, inset, tv.contentInset.right);
}
}
- (void)dealloc
{
[self removeObserver:self forKeyPath:@"contentSize"];
}
@end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-21 18:10:52
Użyj - observerForKeyPath
z contentSize
klawiaturą
Poszukaj jakiegoś kodu na moim blogu (nie skupiaj się na Thai Language)
Http://www.macbaszii.com/2012/10/ios-dev-uitextview-vertical-alignment.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-26 07:51:17
Zainspirowany Kiattisakiem, zaimplementowałem wyrównanie pionowe jako kategorię nad UITextView
, abyś mógł kontrolować wyrównanie pionoweW legacy UITextView
.
Możesz znaleźć go jako gist tutaj.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-26 08:20:01
Miałem ten sam problem z iOS 8.1 i żadna z tych sugestii nie zadziałała.
Cozrobił praca polegała na wejściu do storyboardu i przeciągnięciu mojego UITableView
LUB UITextView
, aby nie był już pierwszym podglądem mojego ekranu UIView
.
Http://www.codeproject.com/Tips/852308/Bug-in-XCode-Vertical-Gap-Above-UITableView
Wydaje się być związane z posiadaniem UIView
osadzonego w UINavigationController
.
;-)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-23 15:15:59
Szybka wersja Tanguy.Odpowiedź G:
if(UIDevice.currentDevice().systemVersion >= "7.0") {
self.automaticallyAdjustsScrollViewInsets = false; // Avoid the top UITextView space, iOS7 (~bug?)
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-20 00:06:05
Sprawdzanie górnej wstawki zawartości textView w -viewDidLoad
:
NSLog(@"NSStringFromUIEdgeInsets(self.itemTextField.contentInset) = %@", NSStringFromUIEdgeInsets(self.itemTextField.contentInset));
Zresetuj go w storyboardzie, jeśli nie jest zero
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-19 17:15:16