আমি কীভাবে উল্লম্বভাবে ইউআইটিেক্সটফিল্ড পাঠ্যকে কেন্দ্র করব?


143

আমি কেবল একটি তাত্ক্ষণিকভাবে দেখছি UITextFieldএবং দেখছি যে পাঠ্যটি উল্লম্বভাবে কেন্দ্র করে না। পরিবর্তে, এটি আমার বোতামের শীর্ষের সাথে ফ্লাশ হয়, যা আমি একধরণের অদ্ভুত দেখতে পাই যেহেতু আমি ডিফল্টটিকে উল্লম্বভাবে কেন্দ্র করার আশা করব। আমি কীভাবে এটিকে উল্লম্বভাবে কেন্দ্রে রাখতে পারি, বা এমন কোনও ডিফল্ট সেটিংস রয়েছে যা আমি অনুপস্থিত?

উত্তর:


369
textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

দ্রুত ব্যবহারে:

textField.contentVerticalAlignment = UIControlContentVerticalAlignment.center

1
@ ব্যবহারকারী 353877: এটি এখনও ঠিক কাজ করে। দ্রষ্টব্য যে রজারের প্রতিক্রিয়ায়, textFieldতার UITextFieldউদাহরণটির নাম - আপনার ভিন্ন হতে পারে। সুতরাং তার মতো কিছু থাকবে UITextField *textField = [[UITextField alloc] init];। যদি আপনি একটি ভিন্ন ভেরিয়েবল নাম (এর textFieldপরে বাদে অন্য কিছু *) yourDifferentVariableNameHere.contentVerticalAlignment = UIControlContentVerticalAlignmentCenterব্যবহার করেন তবে তার পরিবর্তে আপনার প্রয়োজন ।
জেনারেল মাইক

@ ব্যবহারকারী 353877 "সেন্টার" এর ঠিক আগে একটি বিন্দু যুক্ত করুন: ইউআইসিএন্ট্রোলকন্টেন্টাল্টিকালালাইনমেন্ট.সেন্টার;
জোশ

1
ইউআইটিেক্সটভিউয়ের জন্য কি একই পদ্ধতি আছে?
ক্যাফিনশটস

এই সম্পত্তি জন্য একটি দ্রুত সমতুল্য আছে?
রাক্ষসমাথিবিদ

2
সুইফট ৩.০-এ, এনাম ব্যবহার করার জন্য এটিই প্রস্তাবিত উপায়:textField.contentVerticalAlignment = .center
গ্লেন

9

এটি সম্ভাব্য কয়েকটি জটিল কারণ পেয়েছে, কিছু পূর্ববর্তী উত্তরে ইঙ্গিত করেছে:

  • আপনি কী প্রান্তিককরণের চেষ্টা করছেন (কেবল সংখ্যা, কেবল অক্ষর, কেবল বড় হাতের অক্ষর বা একটি মিশ্রণ)
  • প্লেসহোল্ডার
  • সাফ বোতাম

কি আপনি সারিবদ্ধ করার চেষ্টা করছেন গুরুত্বপূর্ণ কারণ ফন্টে যা বিন্দু উল্লম্বভাবে লাইন উচ্চতা, ascenders, descenders ইত্যাদি কারণে কেন্দ্রিক হবে (সূত্র: ilovetypography.com ) (চিত্র ধন্যবাদ http://ilovetypography.com/2009 / 01/14 / অসম্পূর্ণ-উল্লম্ব-ম্যাট্রিক্স / )
উল্লম্ব ফন্ট বৈশিষ্ট্য


উদাহরণস্বরূপ যখন আপনি কেবলমাত্র সংখ্যার সাথে কাজ করছেন, স্ট্যান্ডার্ড সেন্টার অ্যালাইনমেন্টটি বেশ সঠিক দেখাচ্ছে না। নীচের দুটিটির মধ্যে পার্থক্যটির তুলনা করুন, যা একই অ্যালাইনমেন্ট ব্যবহার করে (নীচের কোডে), যার মধ্যে একটি সঠিক দেখাচ্ছে এবং অন্যটি কিছুটা সামান্য দেখায়:

বর্ণের মিশ্রণের সাথে একদম ঠিক নয়:

চিঠিগুলি কেন্দ্রীভূত নয়

তবে এটি ঠিক সংখ্যা হলে সঠিক দেখাচ্ছে

সংখ্যা কেন্দ্রিক খুঁজছেন

সুতরাং, দুর্ভাগ্যক্রমে, এটিকে দৃষ্টিভঙ্গিটি সঠিকভাবে দেখানোর জন্য এটির জন্য কিছুটা ট্রায়াল এবং ত্রুটি এবং ম্যানুয়াল অ্যাডজাস্টমেন্টের প্রয়োজন হতে পারে।

আমি নীচের কোডটি ইউআইটিেক্সটফিল্ডের একটি সাবক্লাসে রেখেছি। এটি সুপারক্লাস পদ্ধতিগুলিকে কল করে কারণ এটি স্পষ্ট বোতামটি উপস্থিত থাকার বিষয়টি বিবেচনা করে।

override func awakeFromNib() {
    contentVerticalAlignment = UIControlContentVerticalAlignment.Center
}

override func textRectForBounds(bounds: CGRect) -> CGRect {
    let boundsWithClear = super.textRectForBounds(bounds)
    let delta = CGFloat(1)
    return CGRect(x: boundsWithClear.minX, y: delta, width: boundsWithClear.width, height: boundsWithClear.height - delta/2)
}

override func editingRectForBounds(bounds: CGRect) -> CGRect {
    let boundsWithClear = super.editingRectForBounds(bounds)
    let delta = CGFloat(1)
    return CGRect(x: boundsWithClear.minX, y: delta, width: boundsWithClear.width, height: boundsWithClear.height - delta/2)
}

override func placeholderRectForBounds(bounds: CGRect) -> CGRect {
    let delta = CGFloat(1)
    return CGRect(x: bounds.minX, y: delta, width: bounds.width, height: bounds.height - delta/2)
}

আমি মনে করি placeholderRectForBoundsডানদিকে অনেক প্রসারিত হয়। আমার একটি ডানদর্শন আছে এবং এটি অন্যান্য সীমানার মতো এটির মধ্যে যায়। আমি কেবল এটি প্রয়োগ করেছি textRectForBoundsএবং অন্যান্য 2 ফানক থেকে কল করেছি :)
সাশো

5

স্টোরিবোর্ডে: নিয়ন্ত্রণে -> আপনার প্রয়োজন অনুযায়ী উল্লম্ব পাশাপাশি অনুভূমিক প্রান্তিককরণটি পরিবর্তন করুন।

এখানে চিত্র বর্ণনা লিখুন


1

এটি টেক্সটফিল্ডের পাঠ্যের জন্য দুর্দান্ত কাজ করে। তবে আপনি যদি প্লেসহোল্ডার পাঠ্যটি (টেক্সটফিল্ড ফাঁকা থাকাকালীন প্রদর্শিত হবে এমন একটি পাঠ্য) ব্যবহার করতে চান তবে আইওএস 7 এ আপনার সমস্যার মুখোমুখি হতে হবে।

আমি টেক্সটফিল্ড ক্লাস ওভাররাইড করে এটি সমাধান করেছি

- (void) drawPlaceholderInRect:(CGRect)rect

পদ্ধতি।

এটার মত:

- (void) drawPlaceholderInRect:(CGRect)rect
{
    [[UIColor blueColor] setFill];
    CGRect placeholderRect = CGRectMake(rect.origin.x, (rect.size.height- self.font.pointSize)/2, rect.size.width, self.font.pointSize);
    [[self placeholder] drawInRect:placeholderRect withFont:self.font lineBreakMode:NSLineBreakByWordWrapping alignment:self.textAlignment];
}

IOS7 এবং পূর্ববর্তী সংস্করণ উভয়ের জন্য কাজ করে।


আপনি সুইফটে কীভাবে এটি পরিচালনা করবেন? কারণ স্ব.প্লেসোল্ডার.ড্রেইউইনআরেক্টের সুইফটে অস্তিত্ব নেই।
কিং-উইজার্ড

এটি কাজ করে তবে স্ব.ফন্ট.পয়েন্ট সাইজটি পয়েন্টসাইজের চেয়ে কিছুটা ভাল কাজ করছে বলে মনে হচ্ছে
ED-209
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.