سؤال

وأنا لا يمكن أن يبدو للحصول على UISearchBar لوضع نفسها من أقصى اليسار إلى أقصى اليمين في شريط التنقل. في - (باطل) طريقة viewDidLoad، لدي البرمجية التالية:

UISearchBar *sb = [[UISearchBar alloc] initWithFrame:self.tableView.tableHeaderView.frame];
sb.delegate = self;
self.navigationItem.titleView = sb;
[sb sizeToFit];
[sb release];

عند بناء وتشغيل، ويبدو على ما يرام لأول وهلة. ومع ذلك، يبحث عن كثب، يمكنك أن تقول هناك هامش / الفضاء على اليسار. وهذا لن يكون مشكلة كبيرة في المخطط الكبير للأشياء، ولكن عندما اضغط على شريط البحث لبدء البحث، وتحريك زر إلغاء في طريقة العرض. لأن يتم وضع شريط البحث قليلا إلى اليمين، والرسوم المتحركة هو متشنج وإلغاء زر يقع قبالة نهاية مثل ذلك: ربط النص

ويبدو كما لو أن UINavigationItem يشبه الجدول مع ثلاث خلايا، حيث هناك الحشو في الأول والأخير وهو ما لا يمكن إزالة - ولا يفعل يبدو أن هناك وسيلة ل'دمج' كل ذلك معا و ثم ضع شريط البحث هناك. أنا أعرف هذه النظرة هو ممكن، لأن البحث أبستور لديه شريط البحث في شريط التنقل ويذهب كل في طريقه إلى الحواف. أحد يعرف كيفية الحصول على شريط البحث ليذهب كل في طريقه إلى حواف حتى بلدي الانزلاق في زر إلغاء الرسوم المتحركة ستعمل بشكل صحيح؟

هل كانت مفيدة؟

المحلول 3

وأعتقد أنني وجدت من الجواب - على الرغم من أنني لم تختبر للتحقق. في قضية I الواردة أعلاه، أود أن الهيكل التالي:

وحدة تحكم شريط التبويب -> تحكم الملاحة -> تحكم مشاهدة

وكان شريط البحث في السؤال في وحدة تحكم الرأي، الذي كان بدوره في وحدة تحكم الملاحة، التي تحكم الملاحة في شريط التبويب.

وكنت اشاهد عرضا ستانفورد CS 193P (ربيع 2009) دورات وفي نهاية المحاضرة 13، قد قدمت الجواب. وقال آلان كانيسترارو أن هيكل التطبيق وجود يجب أن يكون هذا الهيكل:

هذا الهيكل http://img143.imageshack.us/img143/6/viewcontrollerstructure .jpg و

وحيث كان وحدة تحكم جهة النظر أسفل (المتاخمة للتحكم شريط التبويب) وحدة تحكم الرأي الذي كان تحكم شريط البحث. وحذر من أنه إذا لم تقم بهذه الطريقة، فسوف "واجهت مشاكل". ربما المشكلة التي واجهتها؟ أعتقد ذلك.

نصائح أخرى

في الواقع، هناك حل بسيط حقا. كل ما عليك القيام به هو خلق وجهة نظر صفر عرض لهذا البند مرة أخرى:

UIView *hackView = [[UIView alloc] initWithFrame:CGRectZero];
UIBarButtonItem *hackItem = [[UIBarButtonItem alloc] initWithCustomView:hackView];      
self.navigationItem.backBarButtonItem = hackItem;
[hackView release];
[hackItem release];

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
[searchBar sizeToFit];
self.navigationItem.titleView = searchBar;
[searchBar release];

<الإضراب> تأكد من القيام بذلك في طريقة loadView، وليس الحرف الأول. لست متأكدا لماذا هذا يحدث فرقا، ولكن لا.

وعلى ما يبدو فقد حان توقيت. وجود لها في loadView توقفت عن العمل بالنسبة لي، ولكن وضعه في viewWillAppear يعمل (مع الاختيار بحيث يتم ذلك مرة واحدة فقط، وبطبيعة الحال). أعتقد أن الفكرة هي لتعيين titleView بعد بعض التهيئة قد أنجزت بالفعل.

والتعليمة البرمجية التالية يخفي شريط التصفح فقط لهذا UIViewController:

- (void)viewWillAppear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:NO animated:animated];
}

وهكذا للحصول على UISearchBar لإظهارها في مكان UINavigationBar، وعلى وحدة تحكم عرض الجذر يكون مجرد شريط البحث الخاص بك حيث شريط التنقل تكون عادة!

وربما التفاح يستخدم لUISearchDisplayController لفعل هذه الأشياء كيندا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top