iOS 8.0 कोशिकाओं और टेबल व्यू पर लेआउटमैरिज प्रॉपर्टी का परिचय देता है।
यह संपत्ति iOS 7.0 पर उपलब्ध नहीं है, इसलिए आपको इसे असाइन करने से पहले यह सुनिश्चित करने की आवश्यकता है!
आसान तय यह है कि आप अपने सेल को उप-लिंक करें और @ user3570727 द्वारा सुझाए गए लेआउट मार्जिन प्रॉपर्टी को ओवरराइड करें। हालाँकि आप किसी भी सिस्टम व्यवहार को खो देंगे जैसे कि सुरक्षित क्षेत्र से मार्जिन प्राप्त करना इसलिए मैं नीचे दिए गए समाधान की सिफारिश नहीं करता:
(उद्देश्य सी)
-(UIEdgeInsets)layoutMargins {
return UIEdgeInsetsZero // override any margins inc. safe area
}
(तेजी से 4.2):
override var layoutMargins: UIEdgeInsets { get { return .zero } set { } }
यदि आप संपत्ति को ओवरराइड नहीं करना चाहते हैं, या इसे सशर्त रूप से सेट करने की आवश्यकता है, तो पढ़ते रहें।
layoutMargins
प्रॉपर्टी के अलावा , Apple ने आपके सेल में एक प्रॉपर्टी जोड़ी है जो इसे आपके टेबल व्यू की मार्जिन सेटिंग्स को इनहेरिट करने से रोकेगी। जब यह गुण सेट किया जाता है, तो आपकी कोशिकाओं को अपने स्वयं के मार्जिन को तालिका दृश्य से स्वतंत्र रूप से कॉन्फ़िगर करने की अनुमति होती है। इसे ओवरराइड समझें।
इस गुण को कहा जाता है 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
अपने सेल पर NO के लिए प्रॉपर्टी सेट करना आपके सेल मार्जिन को ओवरराइड करने से आपके टेबल व्यू को रोकना चाहिए । कुछ मामलों में, यह ठीक से काम नहीं करता है।
यदि सभी विफल हो जाते हैं, तो आप अपने टेबल व्यू मार्जिन को पाटने के लिए बाध्य कर सकते हैं:
-(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
}
}
... और तुम वहाँ जाओ! यह iOS 7 और 8 पर काम करना चाहिए।
संपादित करें: मोहम्मद सालेह मेरा ध्यान करने के लिए आईओएस 9. में संभावित बदलाव आया आप तालिका दृश्य के सेट करने के लिए आवश्यकता हो सकती है cellLayoutMarginsFollowReadableWidth
के लिए NO
अगर आप सन्निवेश वाली या मार्जिन को अनुकूलित करना चाहते हैं। आपका लाभ भिन्न हो सकता है, यह बहुत अच्छी तरह से प्रलेखित नहीं है।
यह संपत्ति केवल iOS 9 में मौजूद है इसलिए सेटिंग से पहले जांचना सुनिश्चित करें।
if([myTableView respondsToSelector:@selector(setCellLayoutMarginsFollowReadableWidth:)])
{
myTableView.cellLayoutMarginsFollowReadableWidth = NO;
}
स्विफ्ट 4:
if myTableView.responds(to: #selector(setter: self.cellLayoutMarginsFollowReadableWidth)) {
myTableView.cellLayoutMarginsFollowReadableWidth = false
}
( आईओएस 8 UITableView विभाजक इनसेट से उपरोक्त कोड 0 काम नहीं कर रहा है )
संपादित करें: यहाँ एक शुद्ध इंटरफ़ेस बिल्डर दृष्टिकोण है:
नोट: iOS 11 परिवर्तन और इस व्यवहार को सरल करता है, एक अपडेट आगामी होगा ...