আইওএস 8.0 কোষ এবং সারণী দর্শনে লেআউটমার্জিনের বৈশিষ্ট্যটি উপস্থাপন করে।
এই সম্পত্তিটি আইওএস 7.0 এ উপলভ্য নয় সুতরাং আপনাকে এটি নির্ধারণের আগে আপনার চেক করা উচিত!
সহজ ফিক্সটি হ'ল আপনার সেলটি সাবক্লাস করা এবং @ ব্যবহারকারী 3570727 এর পরামর্শ অনুসারে লেআউটটি মার্জিন সম্পত্তিকে ওভাররাইড করুন। তবে আপনি নিরাপদ অঞ্চল থেকে মার্জিন উত্তরাধিকারের মতো কোনও সিস্টেমের আচরণ হারাবেন তাই আমি নীচের সমাধানটির প্রস্তাব দিচ্ছি না:
(উদ্দেশ্য গ)
-(UIEdgeInsets)layoutMargins {
return UIEdgeInsetsZero // override any margins inc. safe area
}
(দ্রুত 4.2):
override var layoutMargins: UIEdgeInsets { get { return .zero } set { } }
আপনি যদি সম্পত্তিটি ওভাররাইড করতে না চান বা শর্তসাপেক্ষে সেট করার দরকার পড়ে থাকেন তবে পড়া চালিয়ে যান।
layoutMargins
সম্পত্তি ছাড়াও , অ্যাপল আপনার কক্ষে এমন একটি সম্পত্তি যুক্ত করেছে যা এটি আপনার টেবিল ভিউয়ের মার্জিন সেটিংস উত্তরাধিকারী হতে বাধা দেবে। যখন এই সম্পত্তিটি সেট করা থাকে, তখন আপনার ঘরগুলি টেবিল দেখার থেকে স্বতন্ত্রভাবে তাদের নিজস্ব মার্জিনগুলি কনফিগার করার অনুমতি দেওয়া হয়। এটিকে ওভাররাইড হিসাবে ভাবেন।
এই preservesSuperviewLayoutMargins
বৈশিষ্ট্যটি কল করা হয়েছে এবং এটিতে সেট করা আপনার সারণী দর্শনে সেট করা যা কিছু সেট করে সেটিকে ওভাররাইড করার NO
অনুমতি দেবে । এটি উভয়ই সময় সাশ্রয় করে ( আপনাকে টেবিল ভিউ'র সেটিংস সংশোধন করতে হবে না ) এবং আরও সংক্ষিপ্ত। বিস্তারিত ব্যাখ্যার জন্য দয়া করে মাইক আবদুল্লাহর জবাবটি দেখুন।layoutMargin
layoutMargin
দ্রষ্টব্য: মাইক আবদুল্লাহর উত্তরে প্রকাশিত হ'ল সেল-লেভেল মার্জিন সেটিংয়ের জন্য যা পরিষ্কার তা অনুসরণ করা হচ্ছে । আপনার কক্ষটি সেট করা আপনার preservesSuperviewLayoutMargins=NO
টেবিল ভিউ সেল সেটিংসকে ওভাররাইড না করে তা নিশ্চিত করবে। যদি আপনি আসলে আপনার পুরো টেবিলের দৃশ্যের সামঞ্জস্যপূর্ণ মার্জিন রাখতে চান তবে অনুগ্রহ করে আপনার কোডটি সেই অনুযায়ী সামঞ্জস্য করুন।
আপনার ঘরের মার্জিন সেটআপ করুন:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Remove seperator inset
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
// Prevent the cell from inheriting the Table View's margin settings
if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
[cell setPreservesSuperviewLayoutMargins:NO];
}
// Explictly set your cell's layout margins
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
সুইফট 4:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// Remove seperator inset
if cell.responds(to: #selector(setter: UITableViewCell.separatorInset)) {
cell.separatorInset = .zero
}
// Prevent the cell from inheriting the Table View's margin settings
if cell.responds(to: #selector(setter: UITableViewCell.preservesSuperviewLayoutMargins)) {
cell.preservesSuperviewLayoutMargins = false
}
// Explictly set your cell's layout margins
if cell.responds(to: #selector(setter: UITableViewCell.layoutMargins)) {
cell.layoutMargins = .zero
}
}
preservesSuperviewLayoutMargins
আপনার কক্ষে সম্পত্তিটি কোনও হিসাবে সেট করা আপনার টেবিল ভিউটিকে আপনার সেল মার্জিনকে ওভাররাইড করা থেকে বিরত করা উচিত । কিছু ক্ষেত্রে, এটি সঠিকভাবে কাজ করে না বলে মনে হচ্ছে।
যদি সমস্ত ব্যর্থ হয়, আপনি আপনার টেবিল ভিউয়ের মার্জিনকে জোর করে চাপিয়ে দিতে পারেন:
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
// Force your tableview margins (this may be a bad idea)
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
}
সুইফট 4:
func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Force your tableview margins (this may be a bad idea)
if tableView.responds(to: #selector(setter: UITableView.separatorInset)) {
tableView.separatorInset = .zero
}
if tableView.responds(to: #selector(setter: UITableView.layoutMargins)) {
tableView.layoutMargins = .zero
}
}
... এবং আপনি সেখানে যান! এটি আইওএস 7 এবং 8 এ কাজ করা উচিত।
সম্পাদনা: মোহাম্মদ সালেহ আইওএস 9-এ একটি সম্ভাব্য পরিবর্তন আমার নজরে এনেছে আপনাকে টেবিল ভিউতে সেট করার দরকার হতে cellLayoutMarginsFollowReadableWidth
পারেNO
আপনি insets বা মার্জিন কাস্টমাইজ করতে চান। আপনার মাইলেজ পরিবর্তিত হতে পারে, এটি খুব ভাল নথিভুক্ত করা হয় না।
এই সম্পত্তিটি কেবল আইওএস 9-তে বিদ্যমান রয়েছে তাই সেটিংয়ের আগে অবশ্যই পরীক্ষা করে দেখুন।
if([myTableView respondsToSelector:@selector(setCellLayoutMarginsFollowReadableWidth:)])
{
myTableView.cellLayoutMarginsFollowReadableWidth = NO;
}
সুইফট 4:
if myTableView.responds(to: #selector(setter: self.cellLayoutMarginsFollowReadableWidth)) {
myTableView.cellLayoutMarginsFollowReadableWidth = false
}
( আইওএস 8 ইউআইটিএবল ভিউ বিভাজক ইনসেট 0 এর উপরের কোডটি কাজ করছে না )
সম্পাদনা: এখানে একটি খাঁটি ইন্টারফেস বিল্ডার পদ্ধতির:
দ্রষ্টব্য: আইওএস 11 পরিবর্তন এবং এই আচরণের অনেকগুলি সরল করে তোলে, একটি আপডেট আসন্ন ...