จะสร้างพื้นที่คงที่และรายการปุ่มแถบพื้นที่แบบยืดหยุ่นโดยใช้โปรแกรมได้อย่างไร?


คำตอบ:


296
UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
fixedItem.width = 20.0f; // or whatever you want

UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

44
โปรดทราบว่าในการตั้งค่าความกว้างของ UIBarButtonItem พื้นที่คงที่คุณต้องตั้งค่า.widthคุณสมบัติ
Nick Forge

คำตอบที่สมบูรณ์แบบ!
Pratik Jamariya

เราจะมีความกว้างที่ยืดหยุ่นให้ระยะห่างเท่ากันระหว่างปุ่มทั้งหมดโดยใช้รหัสได้อย่างไร? ฉันไม่ต้องการฮาร์ดโค้ด width = 20.0
Satyam

เพียงแค่ใส่ความกว้างที่ยืดหยุ่นได้ระหว่างแต่ละปุ่มสองปุ่ม @Satyam
fl034

16

รวดเร็ว

// Fixed Space
let fixedSpace: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
fixedSpace.width = 20.0

// Flexible Space
let flexibleSpace: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)

7
UIBarButtonItem *todayItem = [[UIBarButtonItem alloc] initWithTitle:@"Today" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)];
todayItem.tag = 2;

UIBarButtonItem *cashItem = [[UIBarButtonItem alloc] initWithTitle:@"Cash" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)];
cashItem.tag = 3;

UIBarButtonItem *creditItem = [[UIBarButtonItem alloc] initWithTitle:@"Credit" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)];
creditItem.tag = 4;

UIBarButtonItem *allItem = [[UIBarButtonItem alloc] initWithTitle:@"All" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)];
allItem.tag = 1;

UIBarButtonItem *returnItem = [[UIBarButtonItem alloc] initWithTitle:@"Return" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)];
returnItem.tag = 5;

UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[fixedItem setWidth:455.0f];

UIBarButtonItem *fixed2Item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[fixed2Item setWidth:37.0f];

UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

[self.toolbar setItems:@[fixed2Item, returnItem, creditItem, cashItem, fixedItem, todayItem, flexibleItem, allItem] animated:NO];

ทำไมคุณมีการตั้งค่าที่เหมาะสมรายการปุ่มแถบซ้ายรายการ? นั่นเป็นเพียงรูปแบบที่ไม่ดีจริงๆหรือเป็นข้อบกพร่องและฉันไม่รู้ว่า
Ben Lachman

1

ใน ViewDidLoad:

    //toolbar
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 416, 320, 44)];

// bar btns
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:self action:@selector(goBack)];
UIBarButtonItem *forwardBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward target:self action:@selector(goForward)];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *bookmarkBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(bookmark)];
UIBarButtonItem *refreshBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh)];
UIBarButtonItem *stopLoadingBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:self action:@selector(stopLoading)];

// add btns to the bar
[toolBar setItems:[NSMutableArray arrayWithObjects:bookmarkBtn,backBtn,forwardBtn,flexibleSpace,refreshBtn,stopLoadingBtn, nil]];

// adds the toobar to the view
[self.view addSubview:toolBar];

อย่าลืมการดำเนินการสำหรับแต่ละปุ่มด้วย (ในตัวอย่างนี้คือ UIWebView):

    -(void)goBack
{
    [_webView goBack];
}

-(void)goForward
{
    [_webView goForward];
}

เป็นต้น


1

กับสวิฟท์ที่ 3 มีการเริ่มต้นที่เรียกว่าUIBarButtonItem มีคำประกาศดังต่อไปนี้:init(barButtonSystemItem:target:action:)init(barButtonSystemItem:target:action:)

convenience init(barButtonSystemItem systemItem: UIBarButtonSystemItem, target: Any?, action: Selector?)

เตรียมข้อมูลเบื้องต้นรายการใหม่ที่มีรายการระบบที่ระบุ


UIBarButtonSystemItemเป็นการแจงนับว่ามีหลายกรณีรวมทั้งdone, play, หรือadd cancelอย่างไรก็ตามตามความต้องการของคุณคุณอาจเลือกflexibleSpaceหรือfixedSpaceกรณี

flexibleSpace กรณีมีการประกาศดังต่อไปนี้:

ช่องว่างเพื่อเพิ่มระหว่างรายการอื่น ๆ มีการกระจายพื้นที่อย่างเท่าเทียมกันระหว่างรายการอื่น ๆ คุณสมบัติรายการอื่น ๆ จะถูกละเว้นเมื่อตั้งค่านี้

fixedSpace กรณีมีการประกาศดังต่อไปนี้:

ช่องว่างเพื่อเพิ่มระหว่างรายการอื่น ๆ เฉพาะwidthคุณสมบัติเท่านั้นที่ถูกใช้เมื่อตั้งค่านี้


ดังนั้นคุณสามารถสร้างรายการปุ่มแถบพื้นที่คงที่และยืดหยุ่นได้โดยทางโปรแกรมดังที่แสดงด้านล่าง:

let flexibleSpace = UIBarButtonItem(
    barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace,
    target: nil,
    action: nil
)
let fixedSpace = UIBarButtonItem(
    barButtonSystemItem: UIBarButtonSystemItem.fixedSpace,
    target: nil,
    action: nil
)
fixedSpace.width = 30 // Set width with the appropriate value

ตัวอย่างเช่นโค้ด Playground ด้านล่างแสดงวิธีการเพิ่มแถบด้านล่างโดยมีรายการปุ่มเล่นที่อยู่ตรงกลางสองรายการและปุ่มแถบหยุดชั่วคราวคั่นด้วยช่องว่างคงที่ 30 ในตัวควบคุมมุมมอง:

import PlaygroundSupport
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white
        title = "Home"
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        // Show navigation controller’s built-in toolbar
        navigationController?.setToolbarHidden(false, animated: false)

        // Create UIBarButtonItems
        let flexibleSpace1 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
        let playItem = UIBarButtonItem(barButtonSystemItem: .play, target: self, action: nil)
        let fixedSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
        fixedSpace.width = 30
        let pauseItem = UIBarButtonItem(barButtonSystemItem: .pause, target: self, action: nil)
        let flexibleSpace2 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)

        // Set the view controller toolbar items
        setToolbarItems([flexibleSpace1, playItem, fixedSpace, pauseItem, flexibleSpace2], animated: false)
    }

    override func viewWillDisappear(_ animated: Bool) {
        // Hide navigation controller’s built-in toolbar
        navigationController?.setToolbarHidden(true, animated: true)

        super.viewWillDisappear(animated)
    }

}

let viewController = ViewController()
let navigationController = UINavigationController(rootViewController: viewController)
PlaygroundPage.current.liveView = navigationController

ดูตัวอย่างควบคุมมุมมองของคุณในผู้ช่วยบรรณาธิการสนามเด็กเล่นโดยใช้ViewAssistant EditorShow Assistant Editor

ป้อนคำอธิบายภาพที่นี่


1

สวิฟต์ 5.1.2

// Fixed Space
let fixedSpace: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
fixedSpace.width = 20.0

// Flexible Space
let flexibleSpace: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.