2019 এর জন্য আপ টু ডেট
এটি আইওএসের অন্যতম গুরুতর বাগ gs
এখানে দেওয়া ক্লাসটি UITextViewFixed
সাধারণত সামগ্রিকভাবে সবচেয়ে যুক্তিসঙ্গত সমাধান।
এখানে ক্লাস:
@IBDesignable class UITextViewFixed: UITextView {
override func layoutSubviews() {
super.layoutSubviews()
setup()
}
func setup() {
textContainerInset = UIEdgeInsets.zero
textContainer.lineFragmentPadding = 0
}
}
পরিদর্শকটিতে সক্রিয় স্ক্রোলটি বন্ধ করতে ভুলবেন না!
সমাধান স্টোরিবোর্ডে সঠিকভাবে কাজ করে
সমাধান রানটাইমে সঠিকভাবে কাজ করে
এটাই, তুমি হয়ে গেছ।
সাধারণভাবে, বেশিরভাগ ক্ষেত্রে আপনার যা প্রয়োজন তা হ'ল ।
এমনকি যদি আপনি টেক্সট ভিউ উচ্চতা পরিবর্তন করা হয় মাছি উপর , UITextViewFixed
সাধারণত আপনার প্রয়োজন নেই।
(উড়ে যাওয়ার উচ্চতা পরিবর্তন করার একটি সাধারণ উদাহরণ, এটি ব্যবহারকারীর ধরণ হিসাবে পরিবর্তন করা))
এখানে অ্যাপল থেকে ভাঙা ইউআইটিেক্সটভিউ ...
এখানে UITextViewFixed
:
অবশ্যই অবশ্যই আপনার অবশ্যই তা নোট করুন
পরিদর্শকটিতে সক্রিয় স্ক্রোলটি বন্ধ করুন!
স্ক্রোলটি বন্ধ করতে ভুলবেন নাএইনবলড! :)
আরও কিছু বিষয়
(1) কিছু অস্বাভাবিক ক্ষেত্রে - উদাহরণস্বরূপ, কিছু নমনীয়, গতিময়ভাবে সেল উচ্চতা পরিবর্তনের সাথে সারণীর কিছু ক্ষেত্রে - অ্যাপল একটি উদ্ভট কাজ করে: তারা নীচে অতিরিক্ত স্থান যুক্ত করে । সত্যিই না! এটি আইওএস-এর সবচেয়ে বিপর্যয়কর জিনিস হতে হবে।
উপরেরটি জুড়তে এখানে একটি "দ্রুত সমাধান" রয়েছে যা সাধারণত সেই উন্মাদনার সাথে সহায়তা করে।
...
textContainerInset = UIEdgeInsets.zero
textContainer.lineFragmentPadding = 0
// this is not ideal, but you can sometimes use this
// to fix the "extra space at the bottom" insanity
var b = bounds
let h = sizeThatFits(CGSize(
width: bounds.size.width,
height: CGFloat.greatestFiniteMagnitude)
).height
b.size.height = h
bounds = b
...
(2) কখনও কখনও, আরও একটি সূক্ষ্ম অ্যাপল মেস আপ আপ ঠিক করতে, আপনি এটি যুক্ত করতে হবে:
override func setContentOffset(_ contentOffset: CGPoint, animated: Bool) {
super.setContentOffset(contentOffset, animated: false)
}
(3) যুক্তিযুক্তভাবে, আমাদের যুক্ত করা উচিত :
contentInset = UIEdgeInsets.zero
পরেই .lineFragmentPadding = 0
মধ্যে UITextViewFixed
।
তবে ... বিশ্বাস করুন বা না করুন ... এটি বর্তমান আইওএসে কাজ করে না ! (2019 সালে চেক করা হয়েছে)) ভবিষ্যতে এই লাইনটি যুক্ত করা প্রয়োজন হতে পারে।
UITextView
আইওএস-এ ভাঙা তথ্যটি মোবাইল কম্পিউটারের সমস্ত কম্পিউটারের মধ্যে একটি উদ্ভট বিষয়। এই প্রশ্নের দশ বছরের বার্ষিকী এবং এটি এখনও স্থির হয়নি!
শেষ অবধি, পাঠ্য ক্ষেত্রের জন্য এখানে কিছুটা অনুরূপ পরামর্শ : https://stackoverflow.com/a/43099816/294884
সম্পূর্ণরূপে এলোমেলো টিপ: শেষে কীভাবে "..." যুক্ত করবেন
প্রায়শই আপনি "ইউআইএলবেলের মতো" ইউআইটিএক্সেক্সটভিউ ব্যবহার করছেন। সুতরাং আপনি চান যে এটি একটি উপবৃত্ত "..." ব্যবহার করে পাঠ্য কেটে ফেলুন
যদি তা হয় তবে "সেটআপ" এ কোডের তৃতীয় লাইন যুক্ত করুন:
textContainer.lineBreakMode = .byTruncatingTail
আপনি যদি শূন্য উচ্চতা চান, তবে কখন কোনও পাঠ্য নেই, তা হ্যান্ডসেট টিপ
প্রায়শই আপনি কেবল পাঠ্য প্রদর্শন করতে একটি পাঠ্য দর্শন ব্যবহার করেন। সুতরাং, ব্যবহারকারী আসলে কিছু সম্পাদনা করতে পারবেন না। আপনি "0" রেখা ব্যবহার করে বোঝানোর জন্য পাঠ্য দর্শনটি পাঠ্যের কত লাইনের উপর নির্ভর করে স্বয়ংক্রিয়ভাবে উচ্চতা পরিবর্তন করবে।
এটি দুর্দান্ত, তবে যদি কোনও পাঠ্য না থাকে তবে দুর্ভাগ্যক্রমে আপনি একই উচ্চতা পাবেন যেন পাঠ্যের একটি লাইন থাকে !! পাঠ্য দর্শন কখনও "দূরে যায়"।
আপনি যদি এটি "চলে যেতে" চান তবে কেবল এটি যুক্ত করুন
override var intrinsicContentSize: CGSize {
var i = super.intrinsicContentSize
print("for \(text) size will be \(i)")
if text == "" { i.height = 1.0 }
print(" but we changed it to \(i)")
return i
}
(আমি এটিকে '1' করেছি তাই এটি কী স্পষ্ট তা পরিষ্কার, '0' ঠিক আছে))
ইউআইলাবেল সম্পর্কে কি?
সবেমাত্র পাঠ্য প্রদর্শন করার সময়, ইউআইএলবেলের ইউআইটিেক্সটভিউয়ের থেকে অনেক সুবিধা রয়েছে। ইউআইএলবেল এই কিউএ পৃষ্ঠায় বর্ণিত সমস্যাগুলি থেকে ভোগেন না। প্রকৃতপক্ষে যে কারণে আমরা সবাই সাধারণত "হাল ছেড়ে" এবং কেবল ইউআইটিএক্সটভিউ ব্যবহার করি তা হ'ল ইউআইএলবেল কাজ করা কঠিন is বিশেষত ইউআইএলবেলে সঠিকভাবে প্যাডিং যুক্ত করা হাস্যকর বিষয়। বাস্তবে এখানে ইউআইএলবেলে কীভাবে "অবশেষে" প্যাডিং সঠিকভাবে যুক্ত করা যায় সে সম্পর্কে একটি সম্পূর্ণ আলোচনা এখানে রয়েছে: https://stackoverflow.com/a/58876988/294884 কিছু ক্ষেত্রে যদি আপনি গতিশীল উচ্চতার কোষগুলির সাথে একটি কঠিন বিন্যাস করে থাকেন তবে এটি কখনও কখনও হয় এটি ইউআইএলবেল দিয়ে কঠিন উপায়ে করা আরও ভাল।