UITableView iOS 7 में एक ऑफसेट के साथ शुरू हो रहा है


115

मैंने iOS 7 में एक UIViewController पर एक प्लेन जेन UITableView घसीटा है।

अब पहली सेल शुरू होने से पहले जगह की एक ऊर्ध्वाधर ऑफसेट है। मुझे इससे छुटकारा कैसे मिलेगा? मैं चाहता हूं कि पहली पंक्ति जहां UITableView वास्तव में शुरू होती है, उसके ऊपरी किनारे के बहुत करीब हो। मैंने बड़ी भरपाई के लिए नहीं पूछा था?

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

कोई विचार?


43
मुझे निम्नलिखित द्वारा मदद मिली: YouStoryboard.storyboard> YouViewController> गुण निरीक्षक> अनचेक करें - स्क्रॉल दृश्य इनसेट समायोजित करें।
अलेक्जेंडर

17
btw, आप कमांड कुंजी + एस
हेमांग

@Alexander: मुझे आपके सुझावों से भी मदद मिली, हालांकि एक्सटेंडएडजेस को अनचेक करना। UnderTopBars फिर से दिखाई देने के लिए लंबवत ऑफसेट स्थान का कारण बना। मुझे यकीन नहीं है कि इसकी एक (कई?) Xcode6 में कीड़े हैं, लेकिन ये मुद्दे मुझे एक बार में काफी सिरदर्द देते हैं!
iOS-Coder

जवाबों:


81

डिफ़ॉल्ट टेबल व्यू कंट्रोलर्स द्वारा कंटेंट को नेवी बार के नीचे रखा जाएगा ताकि आप कंटेंट को उसके नीचे स्क्रॉल कर सकें और उसे एक धुंधले अवस्था में, नेबर / टूलबार के नीचे देख सकें।

ऐसा लगता है कि आप इसे 44 (शायद 64) px पर स्थित कर रहे हैं, इसे नौसेना पट्टी के नीचे से बाहर ले जाने के लिए, लेकिन यह पहले से ही इसकी भरपाई करता है ताकि आपको एक बड़ा अंतर मिल जाए।

IB में स्टोरीबोर्ड / xib पर जाएं और नेवी बार स्टफ के तहत शो कंटेंट को अनटिक करें।


6
क्षमा करें, iOS7 अप्रासंगिक पर NDA के बारे में टिप्पणी कैसी है? यह लोगों की मदद करने के लिए एक मंच है।
Cocoadelica

एक्सकोड संस्करण 5.1 में व्यूकंट्रोलर पर अनचाहे किनारों को बढ़ाया> शीर्ष सलाखों के नीचे शीर्ष UITableView सामग्री इनसेट को हटाने के लिए
Emel Elias

3
तो, नेव बार थिगो के तहत शो सामग्री कहां है? मैं इसे नहीं ढूँढ सकता।
अनूप कटेल

10
Xcode 5.1.1 में @FrankGorman विशिष्ट दृश्य नियंत्रक के लिए स्टोरीबोर्ड में एक विकल्प है Adjust Scroll View insets, चेकमार्क को हटा दें।
कोराट प्रशांत

1
hey @koratprashant बहुत उपयोगी टिप्पणी।
केडोगेकर

107

UIViewController के नए iOS 7 कार्यान्वयन में विकल्पों का एक नया सेट है जो डेवलपर को यह चुनने की अनुमति देता है कि क्या सिस्टम स्वचालित रूप से UIScrollView , UITableView और व्युत्पन्न के लिए इनसेट जोड़ देगा ।

इस व्यवहार को अक्षम करने के लिए इन बॉक्स को अपने सभी वांछित UIViewControllers के लिए InterfaceBuilder में, UIViewController पर चयनित ऑब्जेक्ट इंस्पेक्टर के लिए अनचेक करें :

नियंत्रक निरीक्षक देखें

अधिक जानकारी के लिए:

  1. आज ही अपना iOS 7 ऐप सबमिट करें।
  2. iOS 7 UI ट्रांज़िशन गाइड> अपीयरेंस और बिहेवियर

धन्यवाद! तुमने मुझे बचाया।
rsc

68

IOS7 संक्रमण गाइड से:

यदि आप एक स्क्रॉल दृश्य की सामग्री इनसेट को स्वचालित रूप से समायोजित नहीं करना चाहते हैं, तो स्वचालित रूप से AdAdsscrollViewInsets को NO पर सेट करें। (स्वचालित रूप से AdAdsscrollViewInsets का डिफ़ॉल्ट मान हाँ है।)

   self.automaticallyAdjustsScrollViewInsets = NO;

9
इसे एक्सकोड में गुण निरीक्षक पर भी सेट किया जा सकता है। Adjust Scroll View Insetsव्यू कंट्रोलर लेआउट के लिए चेकबॉक्स को अनचेक करें ।
एंड्रयू

1
यदि आप प्रोग्राम (XIB का उपयोग किए बिना) UIViewController लोड करते हैं तो यह एक आकर्षण की तरह काम करता है। automaticallyAdjustsScrollViewInsets = NOव्यू कंट्रोलर में सेट करें ।
कबराजा

यह मेरे लिए था। भ्रमित करना क्योंकि मेरा TableView एक कंटेनर दृश्य के अंदर था और शुरू में ठीक दिखाई दिया। लेकिन यह तब खराब हो गया जब दूसरे व्यू कंट्रोलर से वापस पॉपअप हो गया।
n13

महान! मुझे बहुत समय बचाओ!
inix

34

मेरे पास एक समान समस्या थी, एक दृश्य नियंत्रक को खारिज करने के बाद, मेरे टेबल व्यू से कंटेंटऑफसेट को (0, -64) में बदल दिया गया था।

मेरा समाधान थोड़ा अजीब था, मैंने अन्य सभी उत्तरों की कोशिश की, लेकिन कोई सफलता नहीं मिली, केवल एक चीज जो मेरी समस्या को ठीक करती है वह थी। xib। के नियंत्रण ट्री में तालिका दृश्य स्थिति स्विच करना।

यह इस तरह माता पिता में पहला नियंत्रण था:

इससे पहले

मैंने ImageView के ठीक बाद tableView स्थानांतरित किया और यह काम किया:

उपरांत

ऐसा लगता है कि तालिका को पहली स्थिति में रखने से परेशानी हो रही थी, और तालिका दृश्य को किसी अन्य स्थिति में ले जाने से समस्या ठीक हो गई।

PD मैं न तो स्टोरीलैट का उपयोग कर रहा हूं और न ही स्टोरीबोर्ड का

आशा है कि यह किसी की मदद कर सकता है!


मैंने भी ठीक यही चीज गौर की! मैंने कोई अतिरिक्त विचार नहीं रखा है, लेकिन यूआईटेबल व्यू -44 टॉप को स्थानांतरित करने वाले अंतर की भरपाई करता है। आईबी में ऐसा लगता है कि मुझे -64 पीएक्स को स्थानांतरित करना है, लेकिन रनटाइम में -64 पीएक्स के कारण नेविगेशन बार ओवरलेव्यू ओवरले करता है और -44 पीएक्स ठीक है। मैं इसे बहुत स्पष्ट नहीं कर सकता। मुझे iPad पॉपओवर दृश्य में यह मुद्दा मिला, जब मैंने iPhone स्टोरीबोर्ड में किसी भी समान मुद्दे को नोटिस नहीं किया।
माइक केस्किनोव

यह समस्या उविवि के साथ भी उत्पन्न होती है। यदि उपयोगकर्ता इंटरफ़ेस में दिखाया गया दृश्य समान क्रम में नहीं रखा गया है।
रिंकू

2
मेरे पास आज भी यही मुद्दा था, XCode 6.1 के साथ। एक और 2-3 घंटे चटकाए, सेब के कीड़े के आसपास काम करने की कोशिश कर रहा है ...
माइक गिल्डहिल

3
यह बेहद मददगार था और अधिक ध्यान देने योग्य है! व्यूअर कंट्रोलर सेटिंग्स या कंटेंट इनसेट / ऑफ़सेट के साथ फ़िडलिंग की किसी भी राशि ने मदद नहीं की, लेकिन स्टोरीबोर्ड में विचारों के क्रम को बदलने से मेरे लिए समस्या हल हो गई।
कालेब

1
Apple, मेरा मतलब है ... डब्ल्यूटीएफ? धन्यवाद आदमी, यह भी ऑटोलैयट के साथ स्टोरीबोर्ड तय किया।
बोरहज

30

यह मेरी समान समस्या को हल करता है:

if ([[UIDevice currentDevice].systemVersion floatValue] >= 7){
tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);
}

1
आपको सिस्टम संस्करण को इस तरह से उपयोग करने के लिए if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
फ्राई

यह मेरे लिए स्पेसिंग इश्यू के लिए काम कर रहा था, लेकिन अब मेरा पुल-टू-रिफ्रेश कंट्रोल स्पिनर आंशिक रूप से अस्पष्ट और मेरे शीर्ष मेनू के नीचे दिखाता है। यह भी किसी ने देखा? किसी भी काम?
निक

@ nicv2002 कोशिश करें कि टेबल व्यू प्रोग्राम को क्रिएट करें
एलेक्स

मैंने अन्य सभी समाधानों की कोशिश की लेकिन केवल मेरे लिए यह काम किया
डैनियलआर 25'15

13

यह प्रयोग करके देखें

tableView.separatorInset = UIEdgeInsetsZero;

जाहिर है, यदि आप iOS7 से कम कुछ भी समर्थन कर रहे हैं, तो आपको यह सुनिश्चित करने की आवश्यकता होगी कि ऑब्जेक्ट इस चयनकर्ता को कॉल करने से पहले प्रतिक्रिया करता है।


4
सुनिश्चित नहीं है कि यह मतदान क्यों किया जा रहा है ... सेपरेटरइनसेट केवल कोशिकाओं के बीच की दूरी की रेखाएं दृश्य के किनारे से इनसेट हैं। सवाल कोशिकाओं के ऊपर और नीचे के स्थान के बारे में पूछ रहा है
रेम्ब्रांट Q. आइंस्टीन

छवि भ्रामक है, लेकिन मार्जिन समस्या के लिए एक सामान्य Google खोज इस पृष्ठ की पैदावार देती है।
विल

9

गंभीरता से, बदलते contentOffsetसमाधान नहीं है। आप सिर्फ एक समस्या को दूर कर रहे हैं और कारण को ठीक नहीं कर रहे हैं। मैं एक ही समस्या का सामना कर रहा हूं और यह पता चला है कि समूहीकृत टेबल व्यू में शीर्ष पर एक पैडिंग है। मेरे मामले में टाइप करने के लिए सादे ने चाल चली है।

उम्मीद है कि यह किसी को कुछ मिनट बचाता है। जेड


1
मैं इसे पूरी तरह से याद करता हूं, खुशी है कि मुझे आपका जवाब मिला, UPVOTE
AamirR

8

IOS 9 के साथ, इस पृष्ठ के अन्य उत्तरों में से किसी ने भी मेरे लिए काम नहीं किया (यानी स्टोरीबोर्ड में बक्से को अनचेक करना, सेटिंग automaticallyAdjustsScrollViewInsetsकरनाNO )।

मेरा वर्कअराउंड मैं वास्तव में इस बारे में असंतुष्ट था:

- (void)viewDidAppear:(BOOL)animated {
    self.tableView.contentOffset = CGPointMake(0.0, 0.0);
    self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0);
}

में viewWillAppearया समान रेखाएं viewDidLoadअप्रभावी थीं।


यह uitableviewcontroller iOS 9 के लिए एकमात्र उत्तर होना चाहिए .... वास्तव में, कुछ और मदद नहीं की, और मैंने उन सभी की कोशिश की है, आपको यह कहां मिला, या आपने इसे कैसे पता लगाया? कई 10x
एरेज़

Adjust Scroll View insetsआईओएस 9 के लिए अनचेकिंग चेकबॉक्स काम करता है
एडम

स्क्रॉल समायोजित करें मेरे लिए किसी अन्य समाधान पर काम नहीं करने वाले इनसेट देखें?
योगेश पटेल

5

कभी-कभी, मुझे नेविगेशन कंट्रोलर के अंदर एम्बेडेड 64होने पर अपने टेबल व्यू के शीर्ष पर एक ऊँचाई का फ़ासला मिलता है UIViewController

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

अतीत में, मैं बस सब कुछ फिर से बनाऊंगा, यह आशा करते हुए कि एक साफ स्लेट के बाद बाधाएं सही हो जाती हैं।

TIL: यदि आप एक ऊर्ध्वाधर बाधा नहीं बनाना चाहते हैं Top Layout Guide, तो आप इस Optionतक पहुँचने के लिए कुंजी दबाए रख सकते हैं Container Margin

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

फिर सुनिश्चित करें कि Top Space to Superviewस्थिरांक को सेट किया गया है 0। इसने मेरे लिए कम से कम काम किया।

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


1,5 साल बाद, लेकिन यह मेरी शाम को हल कर दिया। धन्यवाद!
asp_net

4

मेरे लिए यह काम करता है:

- (void)loadView
{
    [super loadView];

    [self setAutomaticallyAdjustsScrollViewInsets:YES];

    self.edgesForExtendedLayout = UIRectEdgeNone;
    self.view.frame = CGRectZero;
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}

2

यदि आप UITableView से पहले एक खाली UIView जोड़ते हैं (या किसी भी दृश्य को स्क्रॉल करने योग्य है जैसे स्क्रॉलव्यू और टेक्स्ट व्यू), तो आप किस्मत में हो सकते हैं।


1

मेरे पास एक कंटेनर दृश्य में एक UITableViewController एम्बेडेड था। ऊर्ध्वाधर स्थान के अवांछित 64 बिंदुओं से छुटकारा पाने के लिए, मुझे इंटरफ़ेस बिल्डर में 'एडजस्ट स्क्रॉल व्यू इनसेट्स' को अनचेक करने और नीचे दिए गए मेरे UITableViewController के दृश्य में UITableView की सामग्री को सेट करने की आवश्यकता है।

ऊर्ध्वाधर स्थान का आकार नेविगेशन बार के फ्रेम की ऊंचाई और y ऑफसेट से मेल खाता हुआ प्रतीत होता है। समस्या केवल iOS 7 पर हुई।

- (void)viewWillAppear:(BOOL)animated;
{
    [super viewWillAppear:animated];

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
        const CGRect navBarFrame = self.navigationController.navigationBar.frame;
        const CGFloat blankVerticalSpace = navBarFrame.origin.y + navBarFrame.size.height;
        self.tableView.contentInset = UIEdgeInsetsMake(-blankVerticalSpace, 0, 0, 0);
    }
}

1

ज़मारिन आईओएस में, मैंने इस मुद्दे को एक पृष्ठभूमि वाले यूआईटेबल व्यू कॉन्ट्रोलर पर प्रस्तुत किया था, जिसके बाद अग्रभूमि मोडल संवाद को खारिज कर दिया गया था। अग्रभूमि में जाने की प्रक्रिया में, यूआईटेबल व्यूकंट्रोलर के पास सेटसेट (आईओएस द्वारा कहीं):

इस वर्ग ने इसे हल किया

public class UITableViewControllerWithBugFix : UITableViewController {
    public UITableViewControllerWithBugFix(UITableViewStyle withStyle) : base(withStyle) {
    }

    public override void ViewWillLayoutSubviews() {
        if (TableView.ContentInset.Top != 0.0f)
            TableView.ContentInset = UIEdgeInsets.Zero;
        if (TableView.ScrollIndicatorInsets.Top != 0.0f)
            TableView.ScrollIndicatorInsets = UIEdgeInsets.Zero;

        base.ViewWillLayoutSubviews();
    }
}

1

समय-समय पर मैं इस भयानक स्थिति में वापस आ जाता हूं, और मुझे लगता है कि यह अभी भी अज्ञात है। तो, भविष्य की स्मृति के लिए ...

हाल ही में, मैं इस समाधान के साथ काम कर रहा हूँ।

  1. शून्य पिक्सेल ऊँचाई के साथ, UITableView के शीर्ष पर एक सबव्यू जोड़ें। Autolayout के साथ या बिना काम करता है।
  2. अगर मुझे विश्वास है कि :-) मैं इस नकली दृश्य को हटाता हूं, तो ऊपर की बाधाओं को ठीक करें, और जादुई रूप से यह काम करता है।

मुझसे मत पूछो क्यों, मुझे अभी भी लगता है कि यह UIKit में एक बग गहरा है।


0

यदि आप स्टोरीबोर्ड पर जाते हैं, तो आप तालिका का चयन करके ऑफ़सेट बदल सकते हैं और विशेषताएँ निरीक्षक में तालिका दृश्य अनुभाग के अंतर्गत आप बाईं ओर सेपरेटर इनसेट को 0 में बदल सकते हैं।


0

मुझे लगता है कि असली उपाय यह है कि टेबलव्यू पर अपने टॉप और बॉटम की कमी को टॉपमैर्जिन और बॉटम मेग्जिन के बराबर किया जाए। शीर्ष लेआउट गाइड और निचला लेआउट गाइड नहीं। यह आपको स्वचालित रूप से रखने की अनुमति देता है AdjustsScrollViewInsets सच है।


0

स्विफ्ट 3 समाधान:

class PaddingLessTableView : UITableView
{
    override func headerView(forSection section: Int) -> UITableViewHeaderFooterView?
    {
        return nil
    }

    override func footerView(forSection section: Int) -> UITableViewHeaderFooterView?
    {
        return nil
    }
}

0

यदि आप अपने TableViewController को एक नेविगेशन-नियंत्रक या एक कंटेनर दृश्य में एम्बेड करते हैं, तो You have to constraint to margins instead of top Layout guide in StoryboardCheck constraint to margins when you are doing the constraintsमेरे लिए किसी और तरीके से काम नहीं किया गया। मैं टिप्पणी नहीं कर सकता इसलिए मैं सिर्फ रॉबर्ट चेन्स के उत्तर पर दोहरा रहा हूं।


0

मैंने कई उत्तरों की कोशिश की। स्टोरीबोर्ड में सेटिंग्स को बदलने से ओवरले मेनू के साथ लहर की समस्या उत्पन्न हुई जो बाईं ओर से पॉप होती है।

मेरे पास स्टोरीबोर्ड में केवल एक खाली UIViewController है, अन्यथा सब कुछ प्रोग्रामेटिक रूप से उत्पन्न होता है।

मुझे UIVIVController के अंदर एक UIView के अंदर UITableView के साथ एक ही समस्या है। जब UIViewController नेविगेशन कंट्रोलर में एम्बेड हो जाता है, तब, हेडर बहुत नीचे से शुरू होता है। W / o नेविगेशन नियंत्रक सब कुछ ठीक काम करता है।

इस समस्या को ठीक करने के लिए मैंने एक यूबेल बनाया और बाधाओं के साथ यूआईबीएबी नीचे बाधा = यूइवीईवाई के शीर्ष बाधा को रखा (इसलिए यह स्क्रीन पर नहीं दिखता है। अब उस अतिरिक्त नियंत्रण के साथ (नया लेबल) टेबल व्यू ठीक से व्यवहार करता है।

    inputsContainerView.addSubview(titleLabel)
    inputsContainerView.addSubview(tableView)

    // inputsContainerView
    ///////////////////////////////////////
    inputsContainerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    inputsContainerView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 0).isActive = true
    inputsContainerView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -40).isActive = true
    inputsContainerView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.7).isActive = true

    // tableView
    ///////////////////////////////////////
    tableView.centerXAnchor.constraint(equalTo: inputsContainerView.centerXAnchor).isActive = true
    tableView.topAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true
    tableView.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
    tableView.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor).isActive = true

    // titleLabel - inserted to stop bad section header behavior
    ///////////////////////////////////////
    titleLabel.centerXAnchor.constraint(equalTo: inputsContainerView.centerXAnchor).isActive = true
    titleLabel.bottomAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true
    titleLabel.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
    titleLabel.heightAnchor.constraint(equalToConstant: 20).isActive = true

0

मुझे iOS 11 और xib, UITableviewController में एक ही समस्या थी और मैंने इसे नीचे के रूप में हल किया

[self.tableView setContentInset:UIEdgeInsetsMake(-44,0,0,0)];
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.