दिलचस्प पोस्ट
ASP.net MVC – मॉडल बाइंडिंग कक्षा के क्षेत्रों को शामिल नहीं करता है? सी # में नेटवर्क कनेक्शन की गति और बैंडविड्थ उपयोग का पता लगा रहा है Request.UrlReferrer null? कैपेबरा 2.0 के साथ मैं पेज शीर्षक का परीक्षण कैसे कर सकता हूं? वेब ऐप से डेस्कटॉप अधिसूचना प्रदर्शित करने के लिए कौन से तरीके हैं? विश्वव्यापी खराब क्यों हैं? ओरेकल जेडीबीसी रुक-रुक कनेक्शन का मुद्दा अपवाद और त्रुटि के बीच अंतर क्या Matplotlib का उपयोग करके अंतर्निहित समीकरणों को साजिश करना संभव है? स्कैपी के साथ अवांछित आरएसटी टीसीपी पैकेट एंड्रॉइड एचटीटीपी क्लाइंट लगातार कुकीज़ टी-एसक्यूएल के साथ टेबल को पिवट कैसे करें? जावा से एक नया प्रॉम्प्ट / टर्मिनल विंडो खोलें ImageIO.read (फ़ाइल फ़ाइल) का उपयोग करके JPEG छवि पढ़ने में असमर्थ मैं पायथन में स्ट्रिंग वेरिएबल में एक टेक्स्ट फ़ाइल कैसे पढ़ूं?

एक UITextView में लंबवत केंद्र पाठ

मैं पाठ को एक बड़े UITextView अंदर खड़ी करना चाहता हूं जो पूरे स्क्रीन को भरता है – ताकि जब थोड़ा सा पाठ हो, तो कुछ शब्द बोलें, यह ऊँचाई से केंद्रित होता है यह पाठ (एक संपत्ति जो आईबी में पाई जा सकती है) को केंद्रित करने के बारे में एक प्रश्न नहीं है, लेकिन पाठ को कम होने पर UITextView के मध्य में पाठ को सही UITextView डालने के बारे में कोई प्रश्न नहीं है, इसलिए UITextView में कोई खाली क्षेत्र नहीं है। क्या यह किया जा सकता है? अग्रिम में धन्यवाद!

Solutions Collecting From Web of "एक UITextView में लंबवत केंद्र पाठ"

सबसे पहले सामग्री के लिए एक पर्यवेक्षक जोड़ें UITextView की कुंजी मान मान जब दृश्य लोड होता है:

 - (void) viewDidLoad { [textField addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:NULL]; [super viewDidLoad]; } 

तब contentOffset को समायोजित करने के लिए इस पद्धति को जोड़ें contentOffset बदलता है हर बार:

 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { UITextView *tv = object; CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height * [tv zoomScale])/2.0; topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect ); tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect}; } 

चूंकि UIKit KVO अनुरूप नहीं है , मैंने इसे UITextView उप-वर्ग के रूप में लागू करने का निर्णय लिया है, जो कि जब भी contentSize परिवर्तन होता है

यह कार्लोस के उत्तर का थोड़ा संशोधित संस्करण है जो contentInset बजाय contentInset सेट करता है आईओएस 9 के साथ संगत होने के अतिरिक्त, यह आईओएस 8.4 पर कम छोटी गाड़ी भी है।

 class VerticallyCenteredTextView: UITextView { override var contentSize: CGSize { didSet { var topCorrection = (bounds.size.height - contentSize.height * zoomScale) / 2.0 topCorrection = max(0, topCorrection) contentInset = UIEdgeInsets(top: topCorrection, left: 0, bottom: 0, right: 0) } } } 

आईओएस 9.0.2 के लिए इसके बजाय हमें सामग्री अंतःस्थापित सेट करना होगा। अगर हम सामग्री ऑफ़सेट केवीओ हैं, तो आईओएस 9.0.2 ने आखिरी पल में इसे 0 पर सेट किया है, सामग्रीऑफ़सेट में बदलावों को ओवरराइड कर रहा है

 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { UITextView *tv = object; CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height * [tv zoomScale])/2.0; topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect ); [tv setContentInset:UIEdgeInsetsMake(topCorrect,0,0,0)]; } - (void) viewWillAppear:(BOOL)animated { [super viewWillAppear:NO]; [questionTextView addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:NULL]; } 

मैं क्रमशः बाएं, नीचे और दायें किनारे के आदानों के लिए 0,0, और 0 का उपयोग किया। अपने उपयोग के मामले के लिए उन लोगों की गणना करना सुनिश्चित करें

यदि आप केवीओ का उपयोग नहीं करना चाहते हैं, तो आप इस कोड को इस तरह से एक फ़ंक्शन के निर्यात के साथ ऑफसेट भी समायोजित कर सकते हैं:

 -(void)adjustContentSize:(UITextView*)tv{ 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)textViewDidChange:(UITextView *)textView{ [self adjustContentSize:textView]; } 

और हर बार जब आप कोड में टेक्स्ट को संपादित करते हैं नियंत्रक को प्रतिनिधि के रूप में सेट करने के लिए मत भूलना

स्विफ्ट 3 संस्करण:

 func adjustContentSize(tv: UITextView){ let deadSpace = tv.bounds.size.height - tv.contentSize.height let inset = max(0, deadSpace/2.0) tv.contentInset = UIEdgeInsetsMake(inset, tv.contentInset.left, inset, tv.contentInset.right) } func textViewDidChange(_ textView: UITextView) { self.adjustContentSize(tv: textView) } 
 func alignTextVerticalInTextView(textView :UITextView) { let size = textView.sizeThatFits(CGSizeMake(CGRectGetWidth(textView.bounds), CGFloat(MAXFLOAT))) var topoffset = (textView.bounds.size.height - size.height * textView.zoomScale) / 2.0 topoffset = topoffset < 0.0 ? 0.0 : topoffset textView.contentOffset = CGPointMake(0, -topoffset) } 

स्विफ्ट 3:

 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() textField.frame = self.view.bounds var topCorrect : CGFloat = (self.view.frame.height / 2) - (textField.contentSize.height / 2) topCorrect = topCorrect < 0.0 ? 0.0 : topCorrect textField.contentInset = UIEdgeInsetsMake(topCorrect,0,0,0) } 

मैंने स्विफ्ट 3 में एक कस्टम खड़ी केंद्रित पाठ दृश्य बनाया है:

 class VerticallyCenteredTextView: UITextView { override var contentSize: CGSize { didSet { var topCorrection = (bounds.size.height - contentSize.height * zoomScale) / 2.0 topCorrection = max(0, topCorrection) contentInset = UIEdgeInsets(top: topCorrection, left: 0, bottom: 0, right: 0) } } } 

रेफरी: http://geek-is-stupid.github.io/blog/2017/03/14/how-to-center-text-vertically-in-a-uitextview/

मेरे पास भी यह समस्या है और मैंने इसे UITextView साथ एक UITableViewCell साथ हल किया। मैंने कस्टम UITableViewCell उपवर्ग में संपत्ति statusTextView , संपत्ति की statusTextView :

 - (void)centerTextInTextView { CGFloat topCorrect = ([self.statusTextView bounds].size.height - [self.statusTextView contentSize].height * [self.statusTextView zoomScale])/2.0; topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect ); self.statusTextView.contentOffset = (CGPoint){ .x = 0, .y = -topCorrect }; 

और विधि में इस विधि को कॉल करें:

 - (void)textViewDidBeginEditing:(UITextView *)textView - (void)textViewDidEndEditing:(UITextView *)textView - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

यह समाधान मेरे लिए कोई समस्या नहीं है, आप इसे कोशिश कर सकते हैं

मेरे पास एक टेक्स्टव्यू है जिसका उपयोग मैं lineFragmentPadding और textContainerInset सेट करने के लिए lineFragmentPadding और textContainerInset को शून्य कर देता textContainerInset । ऊपर की कोई भी समस्या मेरी स्थिति में काम नहीं करती। हालांकि, यह मेरे लिए काम करता है आईओएस 9 के साथ परीक्षण किया गया

 @interface VerticallyCenteredTextView : UITextView @end @implementation VerticallyCenteredTextView -(void)layoutSubviews{ [self recenter]; } -(void)recenter{ // using self.contentSize doesn't work correctly, have to calculate content size CGSize contentSize = [self sizeThatFits:CGSizeMake(self.bounds.size.width, CGFLOAT_MAX)]; CGFloat topCorrection = (self.bounds.size.height - contentSize.height * self.zoomScale) / 2.0; self.contentOffset = CGPointMake(0, -topCorrection); } @end 

यहां एक UITextView एक्सटेंशन है जो ऊर्ध्वाधर सामग्री को केन्द्रित करता है:

 extension UITextView { func centerVertically() { let fittingSize = CGSize(width: bounds.width, height: CGFloat.max) let size = sizeThatFits(fittingSize) let topOffset = (bounds.size.height - size.height * zoomScale) / 2 let positiveTopOffset = max(1, topOffset) contentOffset.y = -positiveTopOffset } } 

कार्लोस का जवाब दें, सिर्फ इसलिए कि आपके पास टीवी में बड़ा है तो टीवी का आकार आपको हालिया पाठ की आवश्यकता नहीं है, इसलिए इस कोड को बदलें:

 tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect}; 

इसके लिए:

 if ([tv contentSize].height < [tv bounds].size.height) { tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect}; } 

ऑटो लेआउट समाधान:

  1. एक UIView बनाएँ जो UITextView के लिए कंटेनर के रूप में कार्य करता है
  2. निम्नलिखित बाधाएं जोड़ें:
    • TextView: अग्रणी स्थान को संरेखित करें: कंटेनर
    • TextView: अंतराल के लिए स्थान को संरेखित करें: कंटेनर
    • टेक्स्टदृश्य: केंद्र को वाई को संरेखित करें: कंटेनर
    • टेक्स्टव्यू: समान ऊंचाई: कंटेनर, रिलेशन: ≤

आप इसे केवल बाधाओं के साथ सीधे सेट कर सकते हैं:

निम्न में से बाधाओं में पाठ को लंबवत और क्षैतिज रूप से संरेखित करने के लिए मैंने 3 बाधाएं जोड़ दी हैं:

यहां छवि विवरण दर्ज करें

  1. ऊंचाई 0 बनाएं और उससे अधिक की बाधाएं जोड़ें
  2. पैरेंट बाधाओं को लंबवत रूप से संरेखित करें
  3. पेरेंट बाधाओं को क्षैतिज रूप से संरेखित करें

यहां छवि विवरण दर्ज करें

आप नीचे कोड का प्रयास कर सकते हैं, कोई पर्यवेक्षक अनिवार्य रूप से आवश्यक नहीं है। पर्यवेक्षक कभी-कभी त्रुटि को फेंकता है जब देखें deallocates आप इस कोड को डीडीलोड में देख सकते हैं, देखेंएल्पअपेर या दृश्य में कहीं भी एपीएपियर कर सकते हैं।

 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ dispatch_async(dispatch_get_main_queue(), ^(void) { UITextView *tv = txtviewDesc; CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height * [tv zoomScale])/2.0; topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect ); tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect}; }); }); 

मैंने इसे ऐसा किया: सबसे पहले, मैंने UITextView को एक UIView में एम्बेड किया (यह मैक ओएस के लिए भी काम करना चाहिए)। इसके बाद मैंने बाहरी UIView के सभी चारों ओर अपने कंटेनर के किनारे पर पिन किया, इसे एक आकार और आकार समान यूआईटीक्श्वेव के बराबर या उसके बराबर दिया। इस प्रकार मैं UITextView के लिए एक उचित कंटेनर था। फिर मैंने UITextView के बाईं और दाईं सीमाओं को यूआईवीवीआई के पक्ष में पिन किया, और यूआईटीक्स्टव्यू को एक ऊंचाई दी। अंत में, मैं UITextView को लंबवत रूप से UIView में केंद्रित कर रहा था। बिंगो 🙂 अब UITextView ऊर्ध्वाधर UIView में केंद्रित है, इसलिए UITextView अंदर पाठ खड़ी भी केंद्रित है।

UITextView + VerticalAlignment.h

 // UITextView+VerticalAlignment.h // (c) The Internet 2015 #import <UIKit/UIKit.h> @interface UITextView (VerticalAlignment) - (void)alignToVerticalCenter; - (void)disableAlignment; @end 

UITextView + VerticalAlignment.m

 #import "UITextView+VerticalAlignment.h" @implementation UITextView (VerticalAlignment) - (void)alignToVerticalCenter { [self addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:NULL]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { UITextView *tv = object; CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height * [tv zoomScale])/2.0; topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect ); tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect}; } - (void)disableAlignment { [self removeObserver:self forKeyPath:@"contentSize"]; } @end 

रूबी मोशन में आईओएस 10 के समाधान:

 class VerticallyCenteredTextView < UITextView def init super end def layoutSubviews self.recenter end def recenter contentSize = self.sizeThatFits(CGSizeMake(self.bounds.size.width, Float::MAX)) topCorrection = (self.bounds.size.height - contentSize.height * self.zoomScale) / 2.0; topCorrection = 0 if topCorrection < 0 self.contentInset = UIEdgeInsetsMake(topCorrection, 0, 0, 0) end end